~squid/squid/3.2

« back to all changes in this revision

Viewing changes to src/errorpage.cc

  • Committer: Amos Jeffries
  • Date: 2013-03-08 02:06:11 UTC
  • Revision ID: squid3@treenet.co.nz-20130308020611-e57qtsxe9yt93x23
Regression fix: Accept-Language header parse

When handling error page negotiation the header parse to detect language
code can enter into an infinite loop. Recover the 3.1 series behaviour
and fix an additional pre-existing off-by-1 error.

The errors were introduced in trunk rev.11496 in 3.2.0.9.

Show diffs side-by-side

added added

removed removed

Lines of Context:
376
376
    while (pos < hdr.size()) {
377
377
        char *dt = lang;
378
378
 
379
 
        if (!pos) {
380
 
            /* skip any initial whitespace. */
381
 
            while (pos < hdr.size() && xisspace(hdr[pos]))
382
 
                ++pos;
383
 
        } else {
384
 
            // IFF we terminated the tag on whitespace or ';' we need to skip to the next ',' or end of header.
385
 
            while (pos < hdr.size() && hdr[pos] != ',')
386
 
                ++pos;
387
 
            if (hdr[pos] == ',')
388
 
                ++pos;
389
 
        }
 
379
        /* skip any initial whitespace. */
 
380
        while (pos < hdr.size() && xisspace(hdr[pos]))
 
381
            ++pos;
390
382
 
391
383
        /*
392
384
         * Header value format:
417
409
        *dt = '\0'; // nul-terminated the filename content string before system use.
418
410
        ++dt;
419
411
 
 
412
        // if we terminated the tag on garbage or ';' we need to skip to the next ',' or end of header.
 
413
        while (pos < hdr.size() && hdr[pos] != ',')
 
414
            ++pos;
 
415
 
 
416
        if (pos < hdr.size() && hdr[pos] == ',')
 
417
            ++pos;
 
418
 
420
419
        debugs(4, 9, HERE << "STATE: dt='" << dt << "', lang='" << lang << "', pos=" << pos << ", buf='" << ((pos < hdr.size()) ? hdr.substr(pos,hdr.size()) : "") << "'");
421
420
 
422
421
        /* if we found anything we might use, try it. */