Amit Kapila <amit.kapil...@gmail.com> writes:
> Pushed.

Coverity thinks this has security issues, and I agree.

/srv/coverity/git/pgsql-git/postgresql/src/backend/replication/logical/proto.c: 
144 in logicalrep_read_begin_prepare()
143             /* read gid (copy it into a pre-allocated buffer) */
>>>     CID 1487517:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 200-character fixed-size string "begin_data->gid" 
>>> by copying the return value of "pq_getmsgstring" without checking the 
>>> length.
144             strcpy(begin_data->gid, pq_getmsgstring(in));

200             /* read gid (copy it into a pre-allocated buffer) */
>>>     CID 1487515:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 200-character fixed-size string 
>>> "prepare_data->gid" by copying the return value of "pq_getmsgstring" 
>>> without checking the length.
201             strcpy(prepare_data->gid, pq_getmsgstring(in));

256             /* read gid (copy it into a pre-allocated buffer) */
>>>     CID 1487516:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 200-character fixed-size string 
>>> "prepare_data->gid" by copying the return value of "pq_getmsgstring" 
>>> without checking the length.
257             strcpy(prepare_data->gid, pq_getmsgstring(in));

316             /* read gid (copy it into a pre-allocated buffer) */
>>>     CID 1487519:  Security best practices violations  (STRING_OVERFLOW)
>>>     You might overrun the 200-character fixed-size string 
>>> "rollback_data->gid" by copying the return value of "pq_getmsgstring" 
>>> without checking the length.
317             strcpy(rollback_data->gid, pq_getmsgstring(in));

I think you'd be way better off making the gid fields be "char *"
and pstrdup'ing the result of pq_getmsgstring.  Another possibility
perhaps is to use strlcpy, but I'd only go that way if it's important
to constrain the received strings to 200 bytes.

                        regards, tom lane


Reply via email to