Няшная / Говнокод #27941 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
buf = malloc(8 * 1024);

snprintf(buf, 8 * 1024,
     "{\n"
     "\t\"tilejson\": \"2.0.0\",\n"
     "\t\"schema\": \"xyz\",\n"
     "\t\"name\": \"%s\",\n"
     "\t\"description\": \"%s\",\n"
     "\t\"attribution\": \"%s\",\n"
     "\t\"minzoom\": %i,\n"
     "\t\"maxzoom\": %i,\n"
     "\t\"tiles\": [\n",
     tile_config->xmlname, (tile_config->description ? tile_config->description : ""), tile_config->attribution, tile_config->minzoom, tile_config->maxzoom);

for (i = 0; i < tile_config->noHostnames; i++) {
    strncat(buf, "\t\t\"", 8 * 1024 - strlen(buf) - 1);
    strncat(buf, tile_config->hostnames[i], 8 * 1024 - strlen(buf) - 1);
    strncat(buf, tile_config->baseuri, 8 * 1024 - strlen(buf) - 1);
    strncat(buf, "{z}/{x}/{y}.", 8 * 1024 - strlen(buf) - 1);
    strncat(buf, tile_config->fileExtension, 8 * 1024 - strlen(buf) - 1);
    strncat(buf, "\"", 8 * 1024 - strlen(buf) - 1);

    if (i < tile_config->noHostnames - 1) {
        strncat(buf, ",", 8 * 1024 - strlen(buf) - 1);
    }

    strncat(buf, "\n", 8 * 1024 - strlen(buf) - 1);
}

strncat(buf, "\t]\n}\n", 8 * 1024 - strlen(buf) - 1);
len = strlen(buf);

/*
 * Add HTTP headers. Make this file cachable for 1 week
 */
md5 = ap_md5_binary(r->pool, (unsigned char *)buf, len);
apr_table_setn(r->headers_out, "ETag",
           apr_psprintf(r->pool, "\"%s\"", md5));
ap_set_content_type(r, "application/json");
ap_set_content_length(r, len);
apr_table_mergen(t, "Cache-Control",
         apr_psprintf(r->pool, "max-age=%" APR_TIME_T_FMT,
                  maxAge));
timestr = apr_palloc(r->pool, APR_RFC822_DATE_LEN);
apr_rfc822_date(timestr, (apr_time_from_sec(maxAge) + r->request_time));
apr_table_setn(t, "Expires", timestr);
ap_rwrite(buf, len, r);
free(buf);

https://github.com/openstreetmap/mod_tile/blob/master/src/mod_tile.c#L1212

Запостил: ISO ISO, (Updated )

Комментарии (6) RSS

  • Где-то там наверняка запрятано переполнение буфера и парочка UB, а еще там shlemiel the painter раскрашивает код в цвета вялотекущей шизофазии.

    Что заставляет людей писать на си как на пхп?
    Ответить
    • > Что заставляет людей писать на си как на пхп?
      Бэкграунд.
      Ответить
      • Возможно. Культурные особенности.
        Хотя код мне напоминает не только mpak.su, но еще лабу первокурсников, когда "структурное программирование" еще в голове не обосновалось.

        Вот тут у нас прямо в одном модуле и глобальные стейты, и потоки, и сокеты, и printfы, и однобуквенные переменные, и незнание calloc, и в случайных местах некоторые маллоки проверяются, а в других нет, и наверняка где-то двойное осовбождение или висячий указатель, и даже есть sleep(5), и как-то даже обидно, что нету ``system("pause")``
        https://github.com/openstreetmap/mod_tile/blob/master/src/render_submit_queue.c
        Ответить
      • > Бэкграунд.

        Именно поэтому я за няшек на бекграунде рабочего стола.
        Ответить
  • >"\t\"description\": \"%s\",\n"

    Мдя.

    > for (i = 0; i < tile_config->noHostnames; i++)
    > 8 * 1024 - strlen(buf)
    Прям по учебнику.
    Ответить

Добавить комментарий

Помни, guest, за тобой могут следить!

    А не использовать ли нам bbcode?


    8