author | erik <erik> | 2007-01-26 20:24:07 (UTC) |
---|---|---|
committer | erik <erik> | 2007-01-26 20:24:07 (UTC) |
commit | cc5b326a212414a612838b0041e6077477ebbc70 (patch) (side-by-side diff) | |
tree | fd69c302a511c3bc715ff0e160181b9ad1cbf82d /noncore/apps/opie-reader | |
parent | 53d630c9c4813142ee13e6843c30476a5db26e78 (diff) | |
download | opie-cc5b326a212414a612838b0041e6077477ebbc70.zip opie-cc5b326a212414a612838b0041e6077477ebbc70.tar.gz opie-cc5b326a212414a612838b0041e6077477ebbc70.tar.bz2 |
A couple of places where a string is overrun. This fixes both of them.
-rw-r--r-- | noncore/apps/opie-reader/chm_lib.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/noncore/apps/opie-reader/chm_lib.c b/noncore/apps/opie-reader/chm_lib.c index ecf8278..7acd1d2 100644 --- a/noncore/apps/opie-reader/chm_lib.c +++ b/noncore/apps/opie-reader/chm_lib.c @@ -1579,49 +1579,49 @@ int chm_enumerate_dir(struct chmFile *h, Int32 curPage; /* buffer to hold whatever page we're looking at */ #ifdef WIN32 UChar *page_buf = alloca((unsigned int)h->block_len); #else UChar page_buf[h->block_len]; #endif struct chmPmglHeader header; UChar *end; UChar *cur; unsigned long lenRemain; /* set to 1 once we've started */ int it_has_begun=0; /* the current ui */ struct chmUnitInfo ui; int flag; /* the length of the prefix */ char prefixRectified[CHM_MAX_PATHLEN+1]; int prefixLen; - char lastPath[CHM_MAX_PATHLEN]; + char lastPath[CHM_MAX_PATHLEN+1]; int lastPathLen; /* starting page */ curPage = h->index_head; /* initialize pathname state */ strncpy(prefixRectified, prefix, CHM_MAX_PATHLEN); prefixLen = strlen(prefixRectified); if (prefixLen != 0) { if (prefixRectified[prefixLen-1] != '/') { prefixRectified[prefixLen] = '/'; prefixRectified[prefixLen+1] = '\0'; ++prefixLen; } } lastPath[0] = '\0'; lastPathLen = -1; /* until we have either returned or given up */ while (curPage != -1) { @@ -1649,49 +1649,50 @@ int chm_enumerate_dir(struct chmFile *h, if (! it_has_begun) { if (ui.length == 0 && strncmp(ui.path, prefixRectified, prefixLen) == 0) it_has_begun = 1; else continue; if (ui.path[prefixLen] == '\0') continue; } /* check if we should stop */ else { if (strncmp(ui.path, prefixRectified, prefixLen) != 0) return 1; } /* check if we should include this path */ if (lastPathLen != -1) { if (strncmp(ui.path, lastPath, lastPathLen) == 0) continue; } - strcpy(lastPath, ui.path); + strncpy(lastPath, ui.path, CHM_MAX_PATHLEN); + lastPath[CHM_MAX_PATHLEN] = '\0'; lastPathLen = strlen(lastPath); /* check for DIRS */ if (ui.length == 0 && !(what & CHM_ENUMERATE_DIRS)) continue; /* check for FILES */ if (ui.length != 0 && !(what & CHM_ENUMERATE_FILES)) continue; /* check for NORMAL vs. META */ if (ui.path[0] == '/') { /* check for NORMAL vs. SPECIAL */ if (ui.path[1] == '#' || ui.path[1] == '$') flag = CHM_ENUMERATE_SPECIAL; else flag = CHM_ENUMERATE_NORMAL; } else flag = CHM_ENUMERATE_META; if (! (what & flag)) continue; |