annotate src/c/static.c @ 2297:6d56080f495c

Fix a read-after-free bug using a timestamp check
author Adam Chlipala <adam@chlipala.net>
date Thu, 19 Nov 2015 13:18:58 -0500
parents c39c48696393
children
rev   line source
adam@1493 1 #include "config.h"
adam@1493 2
adam@1493 3 #include <stdio.h>
adam@1493 4 #include <stdarg.h>
adam@1493 5
adam@1493 6 #include "urweb.h"
adam@1493 7
adam@1493 8 extern uw_app uw_application;
adam@1493 9
grrwlf@1997 10 static void log_(void *data, const char *fmt, ...) {
adam@1493 11 va_list ap;
adam@1493 12 va_start(ap, fmt);
adam@1493 13
adam@1493 14 vprintf(fmt, ap);
adam@1493 15 }
adam@1493 16
grrwlf@1997 17 static uw_loggers loggers = {NULL, log_, log_};
grrwlf@1997 18
adam@2137 19 static char *get_header(void *data, const char *h) {
adam@2137 20 return NULL;
adam@2137 21 }
adam@2137 22
adam@1493 23 int main(int argc, char *argv[]) {
adam@1493 24 uw_context ctx;
adam@1493 25 failure_kind fk;
adam@1493 26
adam@1493 27 if (argc != 2) {
adam@1493 28 fprintf(stderr, "Pass exactly one argument: the URI to run\n");
adam@1493 29 return 1;
adam@1493 30 }
adam@1493 31
grrwlf@1997 32 ctx = uw_init(0, &loggers);
adam@1493 33 uw_set_app(ctx, &uw_application);
adam@2137 34 uw_set_headers(ctx, get_header, NULL);
adam@1814 35 uw_initialize(ctx);
adam@1493 36
adam@1498 37 while (1) {
adam@1498 38 fk = uw_begin(ctx, argv[1]);
adam@1498 39
julian@2162 40 if (fk == SUCCESS || fk == RETURN_INDIRECTLY) {
adam@1498 41 uw_print(ctx, 1);
adam@1498 42 puts("");
adam@1498 43 return 0;
adam@1498 44 } else if (fk != UNLIMITED_RETRY) {
adam@1498 45 fprintf(stderr, "Error: %s\n", uw_error_message(ctx));
adam@1498 46 return 1;
adam@1498 47 }
adam@1502 48
adam@1502 49 uw_reset(ctx);
adam@1493 50 }
adam@1493 51 }
adam@1493 52
adam@1493 53 void *uw_init_client_data() {
adam@1493 54 return NULL;
adam@1493 55 }
adam@1493 56
adam@1493 57 void uw_free_client_data(void *data) {
adam@1493 58 }
adam@1493 59
adam@1493 60 void uw_copy_client_data(void *dst, void *src) {
adam@1493 61 }
adam@1493 62
adam@1493 63 void uw_do_expunge(uw_context ctx, uw_Basis_client cli, void *data) {
adam@1493 64 }
adam@1493 65
adam@1493 66 void uw_post_expunge(uw_context ctx, void *data) {
adam@1493 67 }
adam@1493 68
adam@1493 69 int uw_supports_direct_status = 0;