author | zecke <zecke> | 2003-02-22 16:33:34 (UTC) |
---|---|---|
committer | zecke <zecke> | 2003-02-22 16:33:34 (UTC) |
commit | 2424bcd292444b3a03c9b92dbc7f5b392c355755 (patch) (side-by-side diff) | |
tree | 7f909f39bce8ba8501d07dc6ff238ae7918fc8de /libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | |
parent | 66b00525256255290dfcd9d48ebe1539f15b8dce (diff) | |
download | opie-2424bcd292444b3a03c9b92dbc7f5b392c355755.zip opie-2424bcd292444b3a03c9b92dbc7f5b392c355755.tar.gz opie-2424bcd292444b3a03c9b92dbc7f5b392c355755.tar.bz2 |
fixx off by one in reading
Diffstat (limited to 'libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp index bc51996..24b69fe 100644 --- a/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp +++ b/libopie2/opiepim/backend/odatebookaccessbackend_xml.cpp @@ -20,12 +20,39 @@ #include "opimnotifymanager.h" #include "orecur.h" #include "otimezone.h" #include "odatebookaccessbackend_xml.h" namespace { + // FROM TT again +char *strstrlen(const char *haystack, int hLen, const char* needle, int nLen) +{ + char needleChar; + char haystackChar; + if (!needle || !haystack || !hLen || !nLen) + return 0; + + const char* hsearch = haystack; + + if ((needleChar = *needle++) != 0) { + nLen--; //(to make up for needle++) + do { + do { + if ((haystackChar = *hsearch++) == 0) + return (0); + if (hsearch >= haystack + hLen) + return (0); + } while (haystackChar != needleChar); + } while (strncmp(hsearch, needle, QMIN(hLen - (hsearch - haystack), nLen)) != 0); + hsearch--; + } + return ((char *)hsearch); +} +} + +namespace { time_t start, end, created, rp_end; ORecur* rec; ORecur* recur() { if (!rec) rec = new ORecur; @@ -339,13 +366,13 @@ bool ODateBookAccessBackend_XML::loadFile() { int len = attribute.st_size; int i = 0; char* point; const char* collectionString = "<event "; int strLen = ::strlen(collectionString); int *find; - while ( dt + 1 != 0 && (( point = ::strstr( dt+i, collectionString ) ) != 0 ) ) { + while ( ( point = ::strstrlen( dt+i, len -i, collectionString, strLen ) ) != 0 ) { i = point -dt; i+= strLen; alarmTime = -1; snd = 0; // silent |