aboutsummaryrefslogtreecommitdiff
path: root/ext/misc/base64.c
diff options
context:
space:
mode:
authorlarrybr <larrybr@noemail.net>2023-04-25 02:44:53 +0000
committerlarrybr <larrybr@noemail.net>2023-04-25 02:44:53 +0000
commit21461407f64ef6b81b3d76ab4a23f07ececd0c1d (patch)
tree28a5db779b8ffd99bc819f6e54d3adf2d0a3356b /ext/misc/base64.c
parent7eff609d8a87c61eed915c6a43ef58dc023b000a (diff)
downloadsqlite-21461407f64ef6b81b3d76ab4a23f07ececd0c1d.tar.gz
sqlite-21461407f64ef6b81b3d76ab4a23f07ececd0c1d.zip
Check for OOM sqlite_value_x() returns in base64, base85 extensions.
FossilOrigin-Name: e6f9c0b1f963033a8e17d13935c5c6b12d263fe10c585035a3d1f1154c6ba5d6
Diffstat (limited to 'ext/misc/base64.c')
-rw-r--r--ext/misc/base64.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/ext/misc/base64.c b/ext/misc/base64.c
index 4da3f43eb..25e76a5e9 100644
--- a/ext/misc/base64.c
+++ b/ext/misc/base64.c
@@ -219,9 +219,16 @@ static void base64(sqlite3_context *context, int na, sqlite3_value *av[]){
sqlite3_result_error(context, "blob expanded to base64 too big", -1);
return;
}
+ bBuf = (u8*)sqlite3_value_blob(av[0]);
+ if( !bBuf ){
+ if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){
+ goto memFail;
+ }
+ sqlite3_result_text(context,"",-1,SQLITE_STATIC);
+ break;
+ }
cBuf = sqlite3_malloc(nc);
if( !cBuf ) goto memFail;
- bBuf = (u8*)sqlite3_value_blob(av[0]);
nc = (int)(toBase64(bBuf, nb, cBuf) - cBuf);
sqlite3_result_text(context, cBuf, nc, sqlite3_free);
break;
@@ -234,9 +241,16 @@ static void base64(sqlite3_context *context, int na, sqlite3_value *av[]){
}else if( nb<1 ){
nb = 1;
}
+ cBuf = (char *)sqlite3_value_text(av[0]);
+ if( !cBuf ){
+ if( SQLITE_NOMEM==sqlite3_errcode(sqlite3_context_db_handle(context)) ){
+ goto memFail;
+ }
+ sqlite3_result_zeroblob(context, 0);
+ break;
+ }
bBuf = sqlite3_malloc(nb);
if( !bBuf ) goto memFail;
- cBuf = (char *)sqlite3_value_text(av[0]);
nb = (int)(fromBase64(cBuf, nc, bBuf) - bBuf);
sqlite3_result_blob(context, bBuf, nb, sqlite3_free);
break;