From 1acef0240a66b4325281f554923dda2078980463 Mon Sep 17 00:00:00 2001 From: Alexandre Snarskii Date: Sun, 3 Jun 2018 16:53:54 +0300 Subject: [PATCH] check for allocation problems on low-memory systems. --- bgpq_expander.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bgpq_expander.c b/bgpq_expander.c index c279182..5f584df 100644 --- a/bgpq_expander.c +++ b/bgpq_expander.c @@ -468,6 +468,10 @@ have: unsigned long togot=strtoul(response+1,&eon,10); char* recvbuffer=malloc(togot+2); int offset = 0; + if (!recvbuffer) { + sx_report(SX_FATAL, "error allocating %lu bytes: %s\n", + togot+2, strerror(errno)); + }; memset(recvbuffer,0,togot+2); if(!eon || *eon!='\n') { @@ -626,8 +630,12 @@ repeat: if(response[0]=='A') { char* eon, *c; long togot=strtoul(response+1,&eon,10); - char recvbuffer[togot+2]; + char *recvbuffer = malloc(togot+2); int offset = 0; + if (!recvbuffer) { + sx_report(SX_FATAL, "Error allocating %lu bytes: %s\n", + togot+2, strerror(errno)); + }; if(eon && *eon!='\n') { sx_report(SX_ERROR,"A-code finised with wrong char '%c' (%s)\n", @@ -692,6 +700,7 @@ have3: c+=spn+1; }; memset(recvbuffer, 0, togot+2); + free(recvbuffer); } else if(response[0]=='C') { /* no data */ } else if(response[0]=='D') {