Fixed: [Using the characters '<' and '>' might cause an invalid diff](https://github.com/clicon/clixon-controller/issues/73)

This commit is contained in:
Olof hagsand 2023-12-09 14:11:18 +01:00
parent 574106125f
commit 4d91ce0995
3 changed files with 36 additions and 4 deletions

View file

@ -15,6 +15,10 @@ Expected: February 2024
* Added reference count for shared yang-specs (schema mounts) * Added reference count for shared yang-specs (schema mounts)
### Corrected Bugs
* Fixed: [Using the characters '<' and '>' might cause an invalid diff](https://github.com/clicon/clixon-controller/issues/73)
## 6.5.0 ## 6.5.0
6 December 2023 6 December 2023

View file

@ -989,6 +989,8 @@ xml_diff2cbuf(cbuf *cb,
yang_stmt *yc1; yang_stmt *yc1;
char *b0; char *b0;
char *b1; char *b1;
char *e0 = NULL;
char *e1 = NULL;
int eq; int eq;
int nr=0; int nr=0;
int level1; int level1;
@ -1079,10 +1081,31 @@ xml_diff2cbuf(cbuf *cb,
xml_diff_keys(cb, x0, y0, (level+1)*PRETTYPRINT_INDENT); xml_diff_keys(cb, x0, y0, (level+1)*PRETTYPRINT_INDENT);
nr++; nr++;
} }
/* Encode data to XML */
if (b0){
if (xml_chardata_encode(&e0, "%s", b0) < 0)
goto done;
}
else
e0 = NULL;
if (b1){
if (xml_chardata_encode(&e1, "%s", b1) < 0)
goto done;
}
else
e1 = NULL;
cprintf(cb, "-%*s%s>%s</%s>\n", ((level+1)*PRETTYPRINT_INDENT-1), "<", cprintf(cb, "-%*s%s>%s</%s>\n", ((level+1)*PRETTYPRINT_INDENT-1), "<",
xml_name(x0c), b0, xml_name(x0c)); xml_name(x0c), e0, xml_name(x0c));
cprintf(cb, "+%*s%s>%s</%s>\n", ((level+1)*PRETTYPRINT_INDENT-1), "<", cprintf(cb, "+%*s%s>%s</%s>\n", ((level+1)*PRETTYPRINT_INDENT-1), "<",
xml_name(x1c), b1, xml_name(x1c)); xml_name(x1c), e1, xml_name(x1c));
if (e0){
free(e0);
e0 = NULL;
}
if (e1){
free(e1);
e1 = NULL;
}
} }
} }
else if (xml_diff2cbuf(cb, x0c, x1c, level+1, 0) < 0) else if (xml_diff2cbuf(cb, x0c, x1c, level+1, 0) < 0)
@ -1097,6 +1120,10 @@ xml_diff2cbuf(cbuf *cb,
cprintf(cb, "%*s</%s>\n", level*PRETTYPRINT_INDENT, "", xml_name(x0)); cprintf(cb, "%*s</%s>\n", level*PRETTYPRINT_INDENT, "", xml_name(x0));
retval = 0; retval = 0;
done: done:
if (e0)
free(e0);
if (e1)
free(e1);
return retval; return retval;
} }

View file

@ -143,7 +143,6 @@ yang_schema_mount_point(yang_stmt *y)
* @param[in] xpath Key for yspec on y * @param[in] xpath Key for yspec on y
* @param[out] yspec YANG stmt spec * @param[out] yspec YANG stmt spec
* @retval 0 OK * @retval 0 OK
* @retval -1 Error
*/ */
int int
yang_mount_get(yang_stmt *y, yang_mount_get(yang_stmt *y,
@ -159,6 +158,8 @@ yang_mount_get(yang_stmt *y,
(cv = cvec_find(cvv, xpath)) != NULL && (cv = cvec_find(cvv, xpath)) != NULL &&
yspec) yspec)
*yspec = cv_void_get(cv); *yspec = cv_void_get(cv);
else
*yspec = NULL;
return 0; return 0;
} }
@ -255,7 +256,7 @@ xml_yang_mount_get(clicon_handle h,
goto done; goto done;
if (ret == 0) if (ret == 0)
goto fail; goto fail;
if (yang_mount_get(y, xpath1, yspec) < 0) if (yspec && yang_mount_get(y, xpath1, yspec) < 0)
goto done; goto done;
retval = 1; retval = 1;
done: done: