liquid_feedback_core

changeset 357:d420e7a5a75f

Handle out-of-memory errors in "lf_update" when escaping string literals
author jbe
date Sun Mar 17 10:02:49 2013 +0100 (2013-03-17)
parents 4698b68e0942
children e22a4d2aea2d
files lf_update.c
line diff
     1.1 --- a/lf_update.c	Sun Mar 17 09:28:39 2013 +0100
     1.2 +++ b/lf_update.c	Sun Mar 17 10:02:49 2013 +0100
     1.3 @@ -9,6 +9,7 @@
     1.4    char *res;
     1.5    size_t res_len;
     1.6    res = malloc(2*len+3);
     1.7 +  if (!res) return NULL;
     1.8    res[0] = '\'';
     1.9    res_len = PQescapeStringConn(conn, res+1, str, len, NULL);
    1.10    res[res_len+1] = '\'';
    1.11 @@ -138,6 +139,11 @@
    1.12        int j;
    1.13        issue_id = PQgetvalue(res, i, 0);
    1.14        escaped_issue_id = escapeLiteral(db, issue_id, strlen(issue_id));
    1.15 +      if (!escaped_issue_id) {
    1.16 +        fprintf(stderr, "Could not escape literal in memory.\n");
    1.17 +        err = 1;
    1.18 +        break;
    1.19 +      }
    1.20        old_res2 = NULL;
    1.21        for (j=0; ; j++) {
    1.22          if (j >= 20) {  // safety to avoid endless loops
    1.23 @@ -159,6 +165,12 @@
    1.24            char *persist, *escaped_persist, *cmd;
    1.25            persist = PQgetvalue(old_res2, 0, 0);
    1.26            escaped_persist = escapeLiteral(db, persist, strlen(persist));
    1.27 +          if (!escaped_persist) {
    1.28 +            fprintf(stderr, "Could not escape literal in memory.\n");
    1.29 +            err = 1;
    1.30 +            PQclear(old_res2);
    1.31 +            break;
    1.32 +          }
    1.33            if (asprintf(&cmd, "SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; SELECT \"check_issue\"(%s, %s::\"check_issue_persistence\")", escaped_issue_id, escaped_persist) < 0) {
    1.34              freemem(escaped_persist);
    1.35              fprintf(stderr, "Could not prepare query string in memory.\n");

Impressum / About Us