static void dbquery(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *format, ...) {
va_list ap;
char buf[QUERYBUFLEN];
+ size_t ret;
- /* TODO: truncation check */
va_start(ap, format);
- vsnprintf(buf, sizeof(buf), format, ap);
+ ret = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap);
+ if(ret >= sizeof(buf))
+ Error("dbapi2", ERR_STOP, "Query truncated in dbquery, format: '%s', database: %s", format, db->name);
+
db->__query(db, cb, data, buf);
}
static void dbcreatetable(const DBAPIConn *db, DBAPIQueryCallback cb, DBAPIUserData data, const char *format, ...) {
va_list ap;
char buf[QUERYBUFLEN];
+ size_t ret;
- /* TODO: truncation check */
va_start(ap, format);
- vsnprintf(buf, sizeof(buf), format, ap);
+ ret = vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap);
+ if(ret >= sizeof(buf))
+ Error("dbapi2", ERR_STOP, "Query truncated in dbcreatetable, format: '%s', database: %s", format, db->name);
+
db->__createtable(db, cb, data, buf);
}
if(argcount++ >= DBAPI_SNPRINTF_MAX_ARGS) {
/* calls exit(0) */
- Error("dbapi2", ERR_STOP, "Maximum arguments reached in dbvsnprintf, database: %s", db->name);
+ Error("dbapi2", ERR_STOP, "Maximum arguments reached in dbvsnprintf, format: '%s', database: %s", format, db->name);
}
fallthrough = 0;
/* now... this is a guess, but we should catch it most of the time */
if((l > (DBAPI_SNPRINTF_MAX_ARG_LENGTH / 2)) || !db->__quotestring(db, cb, sizeof(convbuf[0]), s, l)) {
- Error("dbapi2", ERR_WARNING, "Long string truncated (database: %s).", db->name);
+ Error("dbapi2", ERR_WARNING, "Long string truncated, format: '%s', database: %s", format, db->name);
l = DBAPI_SNPRINTF_MAX_ARG_LENGTH;
}
continue;
}
p++;
- if(arg >= argcount) {
- /* calls exit(0) */
- Error("dbapi2", ERR_STOP, "Gone over number of arguments in dbvsnprintf, database: %s", db->name);
- }
+ if(arg >= argcount)
+ Error("dbapi2", ERR_STOP, "Gone over number of arguments in dbvsnprintf, format: '%s', database: %s", format, db->name);
- if(!sbaddstr(&b, convbuf[arg])) {
- /* calls exit(0) */
- Error("dbapi2", ERR_STOP, "Possible truncation in dbvsnprintf, database: %s", db->name);
- }
+ if(!sbaddstr(&b, convbuf[arg]))
+ Error("dbapi2", ERR_STOP, "Possible truncation in dbvsnprintf, format: '%s', database: %s", format, db->name);
arg++;
}