diff --git a/Linkdb.cpp b/Linkdb.cpp index 178901a6..827b8885 100644 --- a/Linkdb.cpp +++ b/Linkdb.cpp @@ -5774,24 +5774,31 @@ bool Links::addLink ( char *link , int32_t linkLen , int32_t nodeNum , if ( link[k] == '>' ) { hasSpaces = false; break; } } bool hitQuestionMark = false; - int32_t k; for(k=0;hasSpaces && linkLen<MAX_URL_LEN && k<linkLen ;k++){ - if ( link[k] == '?' ) hitQuestionMark = true; - tmp[k ] = link[k]; - tmp[k+1] = '\0'; - if ( tmp[k] != ' ' ) continue; - // if we are part of the cgi stuff, use + - if ( hitQuestionMark ) { tmp[k] = '+'; continue; } + int32_t src = 0; + int32_t dst = 0; + for ( ;hasSpaces && linkLen<MAX_URL_LEN && src<linkLen ; src++ ){ // if not enough buffer then we couldn't do the conversion. - if ( k+3 >= MAX_URL_LEN ) { hasSpaces = false; break; } + if ( dst+3 >= MAX_URL_LEN ) { hasSpaces = false; break; } + if ( link[src] == '?' ) + hitQuestionMark = true; + if ( link[src] != ' ' ) { + tmp[dst++] = link[src]; + continue; + } + // if we are part of the cgi stuff, use + + if ( hitQuestionMark ) { + tmp[dst++] = '+'; + continue; + } // if before the '?' then use %20 - tmp[k++] = '%'; - tmp[k++] = '2'; - tmp[k ] = '0'; - tmp[k+1] = '\0'; + tmp[dst++] = '%'; + tmp[dst++] = '2'; + tmp[dst++] = '0'; } if ( hasSpaces ) { link = tmp; - linkLen = k; + linkLen = dst; + tmp[dst] = '\0'; }