Anzeigen der neuesten Beiträge
0 Mitglieder und 4 Gäste betrachten dieses Thema.
Seht so aus, dass du den Bug gefunden hast.
@192e-freakHast Du die Libaries auch getauscht??
for(; *format; ++format) { if( l<1 )//sonst buffer überlauf break; switch(*format)
r_id = file_add(c, 0, tcp_timeout, "", "", "nntp", buff, 0);//"" oder was auch immer statt 0
--- cache.cpp 2005-11-23 13:11:00.000000000 +0100+++ cache.cpp 2006-11-22 15:31:28.000000000 +0100@@ -175,7 +218,8 @@ } else if(x->o == fo::MOVE) { char* from = x->d.begin()->d;- char* to = from + strlen(from) + 1;+ int fromlen=(from==NULL)?0:strlen(from);+ char* to = from + fromlen + 1; if(*to) { if(rename(from, to)) { make_directory(to);@@ -241,13 +284,14 @@ } int cache_open(const char* name)-{ int h = vh();+{+ int h = vh(); fo x; x.h = h; x.o = fo::OPEN; x.t = time();-- block b = { 0, strcpy(new char[strlen(name)+1], name), 0 };+ int namelen=(name==NULL)?0:strlen(name)+1;+ block b = { 0, strncpy(new char[namelen], name,namelen), 0 }; x.d.push_back(b); cache_lock();@@ -257,13 +301,15 @@ } int cache_create(const char* name)-{ int h = vh();+{+ int h = vh(); fo x; x.h = h; x.o = fo::CREATE; x.t = time();+ int namelen=(name==NULL)?0:strlen(name)+1; - block b = { 0, strcpy(new char[strlen(name)+1], name), 0 };+ block b = { 0, strncpy(new char[namelen], name,namelen), 0 }; x.d.push_back(b); cache_lock();@@ -307,13 +353,13 @@ x.t = time(); if(from && to)- { int l1 = strlen(from) + 1;- int l2 = strlen(to) + 1;+ { int l1 = (from==NULL)?0:strlen(from) + 1;+ int l2 = (to==NULL)?1:strlen(to) + 1; block b;;- b.d = new char[l1+l2];- strcpy(b.d, from);- strcpy(b.d + l1, to);+ b.d = new char[l1+l2+1];+ strncpy(b.d, from,l1);+ strncpy(b.d + l1, to,l2); x.d.push_back(b); }@@ -328,11 +374,11 @@ x.o = fo::MKDIR; x.t = time(); - int l = strlen(name) + 1;+ int l = (name==NULL)?1:strlen(name) + 1; block b;; b.d = new char[l];- strcpy(b.d, name);+ strncpy(b.d, name,l); x.d.push_back(b);
string safe(const string& a){ string r = a; for(size_t i = 0; i < a.length(); ++i) { if(r[i] >= 0 && r[i] < ' ') r[i] = '_'; switch(r[i]) { case '\\': case '/': case ':': case '*': case '?': case '"': case '<': case '>': case '|': r[i] = '_'; break; case '%'://%20 usw weg if(r.length()-i>2) r.replace(i,3,"_"); else r[i] = '_'; break; } } return r;}