Ticket #9: ng-autoindex-namelen-fixed.patch

File ng-autoindex-namelen-fixed.patch, 3.8 KB (added by Bryan Whitehead, 12 years ago)

Updated patch for nginx-1.6.0

  • ngx_http_autoindex_module.c

    old new  
    4040    ngx_flag_t     enable;
    4141    ngx_flag_t     localtime;
    4242    ngx_flag_t     exact_size;
     43    ngx_uint_t     max_name_len;
    4344} ngx_http_autoindex_loc_conf_t;
    4445
    4546
    4647#define NGX_HTTP_AUTOINDEX_PREALLOCATE  50
    4748
    48 #define NGX_HTTP_AUTOINDEX_NAME_LEN     50
    49 
    5049
    5150static int ngx_libc_cdecl ngx_http_autoindex_cmp_entries(const void *one,
    5251    const void *two);
     
    8180      offsetof(ngx_http_autoindex_loc_conf_t, exact_size),
    8281      NULL },
    8382
     83    { ngx_string("autoindex_max_name_len"),
     84      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
     85      ngx_conf_set_size_slot,
     86      NGX_HTTP_LOC_CONF_OFFSET,
     87      offsetof(ngx_http_autoindex_loc_conf_t, max_name_len),
     88      NULL },
     89
    8490      ngx_null_command
    8591};
    8692
     
    380386            + sizeof("\">") - 1
    381387            + entry[i].name.len - entry[i].utf_len
    382388            + entry[i].escape_html
    383             + NGX_HTTP_AUTOINDEX_NAME_LEN + sizeof(">") - 2
     389            + alcf->max_name_len + sizeof(">") - 2
    384390            + sizeof("</a>") - 1
    385391            + sizeof(" 28-Sep-1970 12:00 ") - 1
    386392            + 20                                         /* the file size */
     
    442448        len = entry[i].utf_len;
    443449
    444450        if (entry[i].name.len != len) {
    445             if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
    446                 char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3 + 1;
     451            if (len > alcf->max_name_len) {
     452                char_len = alcf->max_name_len - 3 + 1;
    447453
    448454            } else {
    449                 char_len = NGX_HTTP_AUTOINDEX_NAME_LEN + 1;
     455                char_len = alcf->max_name_len + 1;
    450456            }
    451457
    452458            last = b->last;
     
    462468
    463469        } else {
    464470            if (entry[i].escape_html) {
    465                 if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
    466                     char_len = NGX_HTTP_AUTOINDEX_NAME_LEN - 3;
     471                if (len > alcf->max_name_len) {
     472                    char_len = alcf->max_name_len - 3;
    467473
    468474                } else {
    469475                    char_len = len;
     
    475481
    476482            } else {
    477483                b->last = ngx_cpystrn(b->last, entry[i].name.data,
    478                                       NGX_HTTP_AUTOINDEX_NAME_LEN + 1);
     484                                      alcf->max_name_len + 1);
    479485                last = b->last - 3;
    480486            }
    481487        }
    482488
    483         if (len > NGX_HTTP_AUTOINDEX_NAME_LEN) {
     489        if (len > alcf->max_name_len) {
    484490            b->last = ngx_cpymem(last, "..&gt;</a>", sizeof("..&gt;</a>") - 1);
    485491
    486492        } else {
    487             if (entry[i].dir && NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
     493            if (entry[i].dir && alcf->max_name_len - len > 0) {
    488494                *b->last++ = '/';
    489495                len++;
    490496            }
    491497
    492498            b->last = ngx_cpymem(b->last, "</a>", sizeof("</a>") - 1);
    493499
    494             if (NGX_HTTP_AUTOINDEX_NAME_LEN - len > 0) {
    495                 ngx_memset(b->last, ' ', NGX_HTTP_AUTOINDEX_NAME_LEN - len);
    496                 b->last += NGX_HTTP_AUTOINDEX_NAME_LEN - len;
     500            if (alcf->max_name_len - len > 0) {
     501                ngx_memset(b->last, ' ', alcf->max_name_len - len);
     502                b->last += alcf->max_name_len - len;
    497503            }
    498504        }
    499505
     
    667673    conf->enable = NGX_CONF_UNSET;
    668674    conf->localtime = NGX_CONF_UNSET;
    669675    conf->exact_size = NGX_CONF_UNSET;
     676    conf->max_name_len = NGX_CONF_UNSET_UINT;
    670677
    671678    return conf;
    672679}
     
    681688    ngx_conf_merge_value(conf->enable, prev->enable, 0);
    682689    ngx_conf_merge_value(conf->localtime, prev->localtime, 0);
    683690    ngx_conf_merge_value(conf->exact_size, prev->exact_size, 1);
     691    ngx_conf_merge_uint_value(conf->max_name_len, prev->max_name_len, 50);
    684692
    685693    return NGX_CONF_OK;
    686694}