Mercurial > vim
comparison src/userfunc.c @ 23320:1d11e3adbe52 v8.2.2205
patch 8.2.2205: Vim9: memory leak when parsing lambda fails
Commit: https://github.com/vim/vim/commit/6dd41b1d575e8859238144899600e3cbb412c79b
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Dec 24 16:06:00 2020 +0100
patch 8.2.2205: Vim9: memory leak when parsing lambda fails
Problem: Vim9: memory leak when parsing lambda fails.
Solution: Clear growarrays.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 24 Dec 2020 16:15:03 +0100 |
parents | c76240efdf02 |
children | cdb706d5c43d |
comparison
equal
deleted
inserted
replaced
23319:2e18dcd91c7b | 23320:1d11e3adbe52 |
---|---|
521 s = skipwhite(*arg + 1); | 521 s = skipwhite(*arg + 1); |
522 ret = get_function_args(&s, equal_arrow ? ')' : '-', NULL, | 522 ret = get_function_args(&s, equal_arrow ? ')' : '-', NULL, |
523 types_optional ? &argtypes : NULL, types_optional, | 523 types_optional ? &argtypes : NULL, types_optional, |
524 NULL, NULL, TRUE, NULL, NULL); | 524 NULL, NULL, TRUE, NULL, NULL); |
525 if (ret == FAIL || skip_arrow(s, equal_arrow) == NULL) | 525 if (ret == FAIL || skip_arrow(s, equal_arrow) == NULL) |
526 { | |
527 if (types_optional) | |
528 ga_clear_strings(&argtypes); | |
526 return NOTDONE; | 529 return NOTDONE; |
530 } | |
527 | 531 |
528 // Parse the arguments again. | 532 // Parse the arguments again. |
529 if (evaluate) | 533 if (evaluate) |
530 pnewargs = &newargs; | 534 pnewargs = &newargs; |
531 else | 535 else |
533 *arg = skipwhite(*arg + 1); | 537 *arg = skipwhite(*arg + 1); |
534 ret = get_function_args(arg, equal_arrow ? ')' : '-', pnewargs, | 538 ret = get_function_args(arg, equal_arrow ? ')' : '-', pnewargs, |
535 types_optional ? &argtypes : NULL, types_optional, | 539 types_optional ? &argtypes : NULL, types_optional, |
536 &varargs, NULL, FALSE, NULL, NULL); | 540 &varargs, NULL, FALSE, NULL, NULL); |
537 if (ret == FAIL || (*arg = skip_arrow(*arg, equal_arrow)) == NULL) | 541 if (ret == FAIL || (*arg = skip_arrow(*arg, equal_arrow)) == NULL) |
542 { | |
543 if (types_optional) | |
544 ga_clear_strings(&argtypes); | |
538 return NOTDONE; | 545 return NOTDONE; |
546 } | |
539 | 547 |
540 // Set up a flag for checking local variables and arguments. | 548 // Set up a flag for checking local variables and arguments. |
541 if (evaluate) | 549 if (evaluate) |
542 eval_lavars_used = &eval_lavars; | 550 eval_lavars_used = &eval_lavars; |
543 | 551 |