mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-30 11:10:11 +00:00
fix double-free in map literal containing non-ephemerals
This commit is contained in:
parent
60b3359568
commit
aeeef5cc7a
3 changed files with 15 additions and 12 deletions
|
|
@ -1464,7 +1464,7 @@ static void handle_dump(
|
|||
mlhmmv_level_print_stacked(boxed_xval.xval.pnext_level, 0, FALSE, FALSE, "", pstate->stdfp); // xxx mk simpler call w/ dfl args
|
||||
}
|
||||
|
||||
if (!boxed_xval.xval.is_terminal && boxed_xval.is_ephemeral) {
|
||||
if (boxed_xval.is_ephemeral) {
|
||||
mlhmmv_xvalue_free(&boxed_xval.xval);
|
||||
}
|
||||
}
|
||||
|
|
@ -1500,7 +1500,7 @@ static void handle_dump_to_file(
|
|||
free(filename);
|
||||
mv_free(&filename_mv);
|
||||
|
||||
if (!boxed_xval.xval.is_terminal && boxed_xval.is_ephemeral) {
|
||||
if (boxed_xval.is_ephemeral) {
|
||||
mlhmmv_xvalue_free(&boxed_xval.xval);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -190,11 +190,11 @@ static void rxval_evaluator_from_map_literal_aux(
|
|||
if (pkvpair->is_terminal) {
|
||||
boxed_xval_t boxed_xval = pkvpair->pxval_evaluator->pprocess_func(
|
||||
pkvpair->pxval_evaluator->pvstate, pvars);
|
||||
if (!boxed_xval.xval.is_terminal && !boxed_xval.is_ephemeral) {
|
||||
if (boxed_xval.is_ephemeral) {
|
||||
mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval);
|
||||
} else {
|
||||
mlhmmv_xvalue_t copy_xval = mlhmmv_xvalue_copy(&boxed_xval.xval);
|
||||
mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, ©_xval);
|
||||
} else {
|
||||
mlhmmv_level_put_xvalue_singly_keyed(plevel, &mvkey, &boxed_xval.xval);
|
||||
}
|
||||
} else {
|
||||
mlhmmv_level_t* pnext_level = mlhmmv_level_put_empty_map(plevel, &mvkey);
|
||||
|
|
|
|||
17
c/todo.txt
17
c/todo.txt
|
|
@ -1,13 +1,6 @@
|
|||
================================================================
|
||||
BUGFIXES
|
||||
|
||||
* segv:
|
||||
k mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["b".k]=v}'
|
||||
k mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ","); for (k,v in o) {$["b".k]=v}'
|
||||
k mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ","); for (k,v in o) {emit mapsum($*, {"b":v})}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit {k:v}}'
|
||||
|
||||
* non-strings should be non-split (length-1 omap). or, coerced to string.
|
||||
|
||||
================================================================
|
||||
|
|
@ -74,6 +67,16 @@ cook 2: verbs vs. dsl/func list
|
|||
* seqgen vs.
|
||||
mlr -n put 'begin {for (int i = 0; i < 10; i += 1) {emit {"a":i,"b":i**2} }}' then sort -nr a
|
||||
|
||||
* xxx:
|
||||
mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ":"); for (k,v in o) {$["b".k]=v}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put 'o=splitnv($b, ","); for (k,v in o) {$["b".k]=v}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ","); for (k,v in o) {emit mapsum($*, {"b":v})}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit mapsum($*, {"b":v})}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o=splitnv($b, ":"); for (k,v in o) {emit {k:v}}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q ' for (k,v in $*) {emit {k:v}}'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q 'o={}; for (k,v in $*) {o[k]=v}; emit o'
|
||||
mlr --from segv.tsv --itsvlite --oxtab put -q ' for (k,v in {1:2}) {emit {k:v}}'
|
||||
|
||||
cook 3: fun stuff:
|
||||
* mand
|
||||
* sieve
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue