From f5b85ddc9a0e3ac4bb8a200d2ab1a05d5ca9f41b Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Sun, 28 Mar 2010 18:58:03 +0200 Subject: Validate facets in C++/Hybrid enum parser/serializer implementations --- .../cxx/serializer/validating/string-common.cxx | 22 ++++++++++++++-------- .../cxx/serializer/validating/string-common.hxx | 8 +++++--- 2 files changed, 19 insertions(+), 11 deletions(-) (limited to 'libxsde') diff --git a/libxsde/xsde/cxx/serializer/validating/string-common.cxx b/libxsde/xsde/cxx/serializer/validating/string-common.cxx index 20a1b34..c9c70b8 100644 --- a/libxsde/xsde/cxx/serializer/validating/string-common.cxx +++ b/libxsde/xsde/cxx/serializer/validating/string-common.cxx @@ -16,18 +16,24 @@ namespace xsde { void string_common:: validate_facets (const char* s, -#ifdef XSDE_STL - size_t n, -#endif const string_facets::facets& f, context& ctx) { -#ifndef XSDE_STL - size_t n; - if (f.length_set_ || f.min_length_set_ || f.max_length_set_) - n = strlen (s); -#endif + if (f.length_set_ || + f.min_length_set_ || + f.max_length_set_ || + f.enum_count_ != 0) + { + validate_facets (s, strlen (s), f, ctx); + } + } + void string_common:: + validate_facets (const char* s, + size_t n, + const string_facets::facets& f, + context& ctx) + { if (f.length_set_ && n != f.length_) { ctx.schema_error (schema_error::length_not_equal_prescribed); diff --git a/libxsde/xsde/cxx/serializer/validating/string-common.hxx b/libxsde/xsde/cxx/serializer/validating/string-common.hxx index d7f221d..b49ef5a 100644 --- a/libxsde/xsde/cxx/serializer/validating/string-common.hxx +++ b/libxsde/xsde/cxx/serializer/validating/string-common.hxx @@ -6,7 +6,6 @@ #ifndef XSDE_CXX_SERIALIZER_VALIDATING_STRING_COMMON_HXX #define XSDE_CXX_SERIALIZER_VALIDATING_STRING_COMMON_HXX -#include #include namespace xsde @@ -21,9 +20,12 @@ namespace xsde { static void validate_facets (const char* s, -#ifdef XSDE_STL + const string_facets::facets&, + context&); + + static void + validate_facets (const char* s, size_t n, -#endif const string_facets::facets&, context&); }; -- cgit v1.1