--- parser3/src/include/pa_string.h 2001/03/11 08:16:33 1.30 +++ parser3/src/include/pa_string.h 2001/03/18 14:45:26 1.38 @@ -3,7 +3,7 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://design.ru/paf) - $Id: pa_string.h,v 1.30 2001/03/11 08:16:33 paf Exp $ + $Id: pa_string.h,v 1.38 2001/03/18 14:45:26 paf Exp $ */ /* @@ -23,7 +23,7 @@ #define PA_STRING_H #ifdef HAVE_CONFIG_H -#include "pa_config.h" +# include "pa_config.h" #endif #include @@ -31,12 +31,20 @@ #include "pa_pool.h" #include "pa_types.h" +#define UNTAINT_TIMES_BIGGER 10 + #ifndef NO_STRING_ORIGIN -# define STRING_APPEND_PARAMS const char *src, size_t size, bool tainted, char *file, uint line +# define STRING_APPEND_PARAMS \ + const char *src, size_t size, \ + bool tainted, \ + const char *file, uint line # define APPEND(src, size, file, line) real_append(src, size, false, file, line) # define APPEND_TAINTED(src, size, file, line) real_append(src, size, true, file, line) #else -# define STRING_APPEND_PARAMS const char *src, size_t size, bool tainted +# define STRING_APPEND_PARAMS \ + const char *src, \ + size_t size, \ + bool tainted # define APPEND(src, size, file, line) real_append(src, size, false) # define APPEND_TAINTED(src, size, file, line) real_append(src, size, true) #endif @@ -50,23 +58,25 @@ public: }; enum Untaint_lang { + UNKNOWN=0, // when get by name fails NO, // clean YES, // tainted, untaint language as assigned later // untaint languages. assigned by ^untaint[lang]{...} - PASS_APPENDED, + PASS_APPEND, // leave language built into string being appended // just a flag, that value not stored AS_IS, + URI, + TABLE, SQL, JS, - TABLE, HTML, HTML_TYPO }; public: - String(Pool& apool); + String(Pool& apool, const char *src=0, bool tainted=false); String(const String& src); size_t size() const { return fsize; } int used_rows() const { return fused_rows; } @@ -84,13 +94,15 @@ public: } bool operator != (const String& src) const { return cmp(src)!=0; } - bool operator == (char* src) const; + bool operator == (const char* b_ptr) const; String& append(const String& src, Untaint_lang lang); uint hash_code() const; const Origin& origin() const { return head.rows[0].item.origin; } + void change_lang(Untaint_lang lang); + private: struct Chunk {