for (i=0; i<nr; i++) {
                if (lengths) lengths[i] = len[i];
                if (len[i]) {
-                       results[i] = malloc(len[i] + 1);
+                       if ((results[i] = malloc(len[i] + 1)) == NULL)
+                               goto nomem;
                        memcpy(results[i], row[i], len[i]);
                        results[i][len[i]] = '\000';
-               } else
-                       results[i] = strdup("");
+               } else {
+                       if ((results[i] = strdup("")) == NULL)
+                               goto nomem;
+               }
        }
 
        return nr;
+nomem:
+       for (nr = i, i = 0; i < nr; i++) {
+               free(results[i]);
+               results[i] = NULL;
+       }
+       ERR(ctx, ENOMEM, "insufficient memory for field data");
+       return -1;
 }
 
 
                binds[i].buffer_type = MYSQL_TYPE_VAR_STRING;
                binds[i].buffer_length = GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH - 1;
                binds[i].length = &lengths[i];
-               binds[i].buffer = results[i] = calloc(1, GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH);
+               if ((binds[i].buffer = results[i] = calloc(1, GLITE_LBU_DEFAULT_RESULT_BUFFER_LENGTH)) == NULL) {
+                       ERR(ctx, ENOMEM, "insufficient memory for field data");
+                       goto failed;
+               }
        }
        if (mysql_module.mysql_stmt_bind_result(stmt->stmt, binds) != 0) goto failedstmt;
 
 
        for (i = 0; i < n; i++) {
                /* sanity check for internal error (NULL when invalid row) */
                s = psql_module.PQgetvalue(stmt->res, stmt->row, i) ? : "";
-               results[i] = strdup(s);
+               if ((results[i] = strdup(s)) == NULL)
+                       goto nomem;
                if (lengths) lengths[i] = strlen(s);
        }
 
        stmt->row++;
        return n;
+nomem:
+       for (n = i, i = 0; i < n; i++) {
+               free(results[i]);
+               results[i] = NULL;
+       }
+       set_error(stmt->generic.ctx, ENOMEM, "insufficient memory for field data");
+       return -1;
 }