mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
libdm: report: fix escaping of JSON quote char in reported fields
Commit73ec3c954b
added a way to print only a part of the report string (repstr) to support decoding individual string list items out of repstr. The repstr is normally printed through _safe_repstr_output so that any JSON_QUOTE character ('"') found within the repstr is escaped to not interfere with value quoting in JSON format. However, the commit73ec3c954b
missed checking the 'len' argument passed to _safe_repstr_output function when adding the rest of the repstr after all previous JSON_QUOTE characters were escaped (when calling the last dm_pool_grow_object). When 'len' is 0, we need to calculate the 'len' ourselves in the function by simply calling strlen. This is because 'len' is passed to the function only if we're taking a part of repstr, not as a whole.
This commit is contained in:
parent
508782a913
commit
800436d2af
@ -4572,17 +4572,12 @@ bad:
|
|||||||
static int _safe_repstr_output(struct dm_report *rh, const char *repstr, size_t len)
|
static int _safe_repstr_output(struct dm_report *rh, const char *repstr, size_t len)
|
||||||
{
|
{
|
||||||
const char *p_repstr;
|
const char *p_repstr;
|
||||||
const char *repstr_end = repstr + len;
|
const char *repstr_end = len ? repstr + len : repstr + strlen(repstr);
|
||||||
|
|
||||||
/* Escape any JSON_QUOTE that may appear in reported string. */
|
/* Escape any JSON_QUOTE that may appear in reported string. */
|
||||||
while (1) {
|
while (1) {
|
||||||
if (len) {
|
if (!(p_repstr = memchr(repstr, JSON_QUOTE[0], repstr_end - repstr)))
|
||||||
if (!(p_repstr = memchr(repstr, JSON_QUOTE[0], repstr_end - repstr)))
|
break;
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
if (!(p_repstr = strstr(repstr, JSON_QUOTE)))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_repstr > repstr) {
|
if (p_repstr > repstr) {
|
||||||
if (!dm_pool_grow_object(rh->mem, repstr, p_repstr - repstr)) {
|
if (!dm_pool_grow_object(rh->mem, repstr, p_repstr - repstr)) {
|
||||||
|
@ -4571,17 +4571,12 @@ bad:
|
|||||||
static int _safe_repstr_output(struct dm_report *rh, const char *repstr, size_t len)
|
static int _safe_repstr_output(struct dm_report *rh, const char *repstr, size_t len)
|
||||||
{
|
{
|
||||||
const char *p_repstr;
|
const char *p_repstr;
|
||||||
const char *repstr_end = repstr + len;
|
const char *repstr_end = len ? repstr + len : repstr + strlen(repstr);
|
||||||
|
|
||||||
/* Escape any JSON_QUOTE that may appear in reported string. */
|
/* Escape any JSON_QUOTE that may appear in reported string. */
|
||||||
while (1) {
|
while (1) {
|
||||||
if (len) {
|
if (!(p_repstr = memchr(repstr, JSON_QUOTE[0], repstr_end - repstr)))
|
||||||
if (!(p_repstr = memchr(repstr, JSON_QUOTE[0], repstr_end - repstr)))
|
break;
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
if (!(p_repstr = strstr(repstr, JSON_QUOTE)))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p_repstr > repstr) {
|
if (p_repstr > repstr) {
|
||||||
if (!dm_pool_grow_object(rh->mem, repstr, p_repstr - repstr)) {
|
if (!dm_pool_grow_object(rh->mem, repstr, p_repstr - repstr)) {
|
||||||
|
Loading…
Reference in New Issue
Block a user