diff options
author | Michael Meskes <meskes@postgresql.org> | 2006-06-21 10:24:41 +0000 |
---|---|---|
committer | Michael Meskes <meskes@postgresql.org> | 2006-06-21 10:24:41 +0000 |
commit | a829da152c6cdf425c6c81ef74b494ec87d90d99 (patch) | |
tree | ba7deb613782ad91ca9b4a691a2cfdb1a042c9e6 /src/interfaces/ecpg/ecpglib/data.c | |
parent | 27c3e3de0939d93ae8adb50ab7e00c4a5ff2fa0d (diff) |
Added fixed from the coverity report send in by Joachim Wieland <joe@mcknight.de>
Added missing error handling in a few functions in ecpglib
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/data.c')
-rw-r--r-- | src/interfaces/ecpg/ecpglib/data.c | 92 |
1 files changed, 65 insertions, 27 deletions
diff --git a/src/interfaces/ecpg/ecpglib/data.c b/src/interfaces/ecpg/ecpglib/data.c index 1f6d26f7eea..c81a6828474 100644 --- a/src/interfaces/ecpg/ecpglib/data.c +++ b/src/interfaces/ecpg/ecpglib/data.c @@ -1,4 +1,4 @@ -/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.31 2006/06/06 11:31:55 meskes Exp $ */ +/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/data.c,v 1.32 2006/06/21 10:24:40 meskes Exp $ */ #define POSTGRES_ECPG_INTERNAL #include "postgres_fe.h" @@ -93,13 +93,17 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, } else { - ECPGraise(lineno, ECPG_MISSING_INDICATOR, ECPG_SQLSTATE_NULL_VALUE_NO_INDICATOR_PARAMETER, NULL); + ECPGraise(lineno, ECPG_MISSING_INDICATOR, + ECPG_SQLSTATE_NULL_VALUE_NO_INDICATOR_PARAMETER, + NULL); return (false); } } break; default: - ECPGraise(lineno, ECPG_UNSUPPORTED, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, ECPGtype_name(ind_type)); + ECPGraise(lineno, ECPG_UNSUPPORTED, + ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, + ECPGtype_name(ind_type)); return (false); break; } @@ -111,9 +115,10 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, /* let's check if it really is an array if it should be one */ if (isarray == ECPG_ARRAY_ARRAY) { - if (*pval != '{') + if (!pval || *pval != '{') { - ECPGraise(lineno, ECPG_DATA_NOT_ARRAY, ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL); + ECPGraise(lineno, ECPG_DATA_NOT_ARRAY, + ECPG_SQLSTATE_DATATYPE_MISMATCH, NULL); return (false); } @@ -134,13 +139,15 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, { if (binary) { - if (pval) - { - if (varcharsize == 0 || varcharsize*offset >= size) - memcpy((char *) ((long) var + offset * act_tuple), pval, size); + if (pval) + { + if (varcharsize == 0 || varcharsize*offset >= size) + memcpy((char *) ((long) var + offset * act_tuple), + pval, size); else { - memcpy((char *) ((long) var + offset * act_tuple), pval, varcharsize*offset); + memcpy((char *) ((long) var + offset * act_tuple), + pval, varcharsize*offset); if (varcharsize*offset < size) { @@ -195,7 +202,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, res = strtol(pval, &scan_length, 10); if (garbage_left(isarray, scan_length, compat)) { - ECPGraise(lineno, ECPG_INT_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_INT_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } pval = scan_length; @@ -228,7 +236,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, ures = strtoul(pval, &scan_length, 10); if (garbage_left(isarray, scan_length, compat)) { - ECPGraise(lineno, ECPG_UINT_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_UINT_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } pval = scan_length; @@ -305,7 +314,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (garbage_left(isarray, scan_length, compat)) { - ECPGraise(lineno, ECPG_FLOAT_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_FLOAT_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } pval = scan_length; @@ -337,7 +347,9 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, else if (offset == sizeof(int)) *((int *) (var + offset * act_tuple)) = false; else - ECPGraise(lineno, ECPG_CONVERT_BOOL, ECPG_SQLSTATE_DATATYPE_MISMATCH, "different size"); + ECPGraise(lineno, ECPG_CONVERT_BOOL, + ECPG_SQLSTATE_DATATYPE_MISMATCH, + "different size"); break; } else if (pval[0] == 't' && pval[1] == '\0') @@ -347,7 +359,9 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, else if (offset == sizeof(int)) *((int *) (var + offset * act_tuple)) = true; else - ECPGraise(lineno, ECPG_CONVERT_BOOL, ECPG_SQLSTATE_DATATYPE_MISMATCH, "different size"); + ECPGraise(lineno, ECPG_CONVERT_BOOL, + ECPG_SQLSTATE_DATATYPE_MISMATCH, + "different size"); break; } else if (pval[0] == '\0' && PQgetisnull(results, act_tuple, act_field)) @@ -357,7 +371,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, } } - ECPGraise(lineno, ECPG_CONVERT_BOOL, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_CONVERT_BOOL, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); break; @@ -464,7 +479,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, /* did we get an error? */ if (nres == NULL) { - ECPGlog("ECPGget_data line %d: RESULT: %s errno %d\n", lineno, pval ? pval : "", errno); + ECPGlog("ECPGget_data line %d: RESULT: %s errno %d\n", + lineno, pval ? pval : "", errno); if (INFORMIX_MODE(compat)) { @@ -472,11 +488,20 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, * Informix wants its own NULL value here instead * of an error */ - ECPGset_noind_null(ECPGt_numeric, nres); + nres = PGTYPESnumeric_new(); + if (nres) + ECPGset_noind_null(ECPGt_numeric, nres); + else + { + ECPGraise(lineno, ECPG_OUT_OF_MEMORY, + ECPG_SQLSTATE_ECPG_OUT_OF_MEMORY, NULL); + return (false); + } } else { - ECPGraise(lineno, ECPG_NUMERIC_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_NUMERIC_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -488,7 +513,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (garbage_left(isarray, scan_length, compat)) { free(nres); - ECPGraise(lineno, ECPG_NUMERIC_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_NUMERIC_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -522,11 +548,16 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, * Informix wants its own NULL value here instead * of an error */ + ires = (interval *) ECPGalloc(sizeof(interval), lineno); + if (!ires) + return (false); + ECPGset_noind_null(ECPGt_interval, ires); } else { - ECPGraise(lineno, ECPG_INTERVAL_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_INTERVAL_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -538,7 +569,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (garbage_left(isarray, scan_length, compat)) { free(ires); - ECPGraise(lineno, ECPG_INTERVAL_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_INTERVAL_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -571,7 +603,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, } else { - ECPGraise(lineno, ECPG_DATE_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_DATE_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -582,7 +615,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (garbage_left(isarray, scan_length, compat)) { - ECPGraise(lineno, ECPG_DATE_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_DATE_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -613,7 +647,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, } else { - ECPGraise(lineno, ECPG_TIMESTAMP_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_TIMESTAMP_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -624,7 +659,8 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, if (garbage_left(isarray, scan_length, compat)) { - ECPGraise(lineno, ECPG_TIMESTAMP_FORMAT, ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); + ECPGraise(lineno, ECPG_TIMESTAMP_FORMAT, + ECPG_SQLSTATE_DATATYPE_MISMATCH, pval); return (false); } } @@ -635,7 +671,9 @@ ECPGget_data(const PGresult *results, int act_tuple, int act_field, int lineno, break; default: - ECPGraise(lineno, ECPG_UNSUPPORTED, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, ECPGtype_name(type)); + ECPGraise(lineno, ECPG_UNSUPPORTED, + ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, + ECPGtype_name(type)); return (false); break; } |