{"thread":{"id":"63764","subject":"[ANNOUNCE] Git v2.50.1 and friends","startedAt":"2025-07-08T17:01:55Z","lastAt":"2025-07-09T16:08:10Z","messageCount":6,"participants":["Junio C Hamano","Todd Zullinger","Justin Tobler"],"isPatch":false,"patchVersion":null,"patchTotal":null},"messages":[{"id":"521556","messageId":"xmqqzfdevcov.fsf@gitster.g","threadId":"63764","inReplyTo":null,"subject":"[ANNOUNCE] Git v2.50.1 and friends","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-08T17:01:52Z","receivedAt":"2025-07-08T17:01:55Z","isPatch":false,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"A maintenance release Git v2.50.1 and others for older maintenance\ntracks down to maint-2.43 are now available at the usual places.\n\nThis is a set of coordinated security fix releases.  Please update\nat your earliest convenience.\n\nThe tarballs are found at:\n\n    https://www.kernel.org/pub/software/scm/git/\n\nThe following public repositories all have a copy of the v2.43.7,\nv2.44.4, v2.45.4, v2.46.4, v2.47.3, v2.48.2, v2.49.1 and v2.50.1\ntags:\n\n  url = https://git.kernel.org/pub/scm/git/git\n  url = https://kernel.googlesource.com/pub/scm/git/git\n  url = git://repo.or.cz/alt-git.git\n  url = https://github.com/gitster/git\n\n----------------------------------------------------------------\n\nGit v2.50.1 Release Notes\n=========================\n\nThis release merges up the fixes that appear in v2.43.7, v2.44.4,\nv2.45.4, v2.46.4, v2.47.3, v2.48.2, and v2.49.1 to address the\nfollowing CVEs: CVE-2025-27613, CVE-2025-27614, CVE-2025-46334,\nCVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and\nCVE-2025-48386. See the release notes for v2.43.7 for details.\n\n----------------------------------------------------------------\n\nGit v2.43.7 Release Notes\n=========================\n\nThis release includes fixes for CVE-2025-27613, CVE-2025-27614,\nCVE-2025-46334, CVE-2025-46835, CVE-2025-48384, CVE-2025-48385, and\nCVE-2025-48386.\n\nFixes since v2.43.6\n-------------------\n\n * CVE-2025-27613, Gitk:\n\n   When a user clones an untrusted repository and runs Gitk without\n   additional command arguments, any writable file can be created and\n   truncated. The option \"Support per-file encoding\" must have been\n   enabled. The operation \"Show origin of this line\" is affected as\n   well, regardless of the option being enabled or not.\n\n * CVE-2025-27614, Gitk:\n\n   A Git repository can be crafted in such a way that a user who has\n   cloned the repository can be tricked into running any script\n   supplied by the attacker by invoking `gitk filename`, where\n   `filename` has a particular structure.\n\n * CVE-2025-46334, Git GUI (Windows only):\n\n   A malicious repository can ship versions of sh.exe or typical\n   textconv filter programs such as astextplain. On Windows, path\n   lookup can find such executables in the worktree. These programs\n   are invoked when the user selects \"Git Bash\" or \"Browse Files\" from\n   the menu.\n\n * CVE-2025-46835, Git GUI:\n\n   When a user clones an untrusted repository and is tricked into\n   editing a file located in a maliciously named directory in the\n   repository, then Git GUI can create and overwrite any writable\n   file.\n\n * CVE-2025-48384, Git:\n\n   When reading a config value, Git strips any trailing carriage\n   return and line feed (CRLF). When writing a config entry, values\n   with a trailing CR are not quoted, causing the CR to be lost when\n   the config is later read.  When initializing a submodule, if the\n   submodule path contains a trailing CR, the altered path is read\n   resulting in the submodule being checked out to an incorrect\n   location. If a symlink exists that points the altered path to the\n   submodule hooks directory, and the submodule contains an executable\n   post-checkout hook, the script may be unintentionally executed\n   after checkout.\n\n * CVE-2025-48385, Git:\n\n   When cloning a repository Git knows to optionally fetch a bundle\n   advertised by the remote server, which allows the server-side to\n   offload parts of the clone to a CDN. The Git client does not\n   perform sufficient validation of the advertised bundles, which\n   allows the remote side to perform protocol injection.\n\n   This protocol injection can cause the client to write the fetched\n   bundle to a location controlled by the adversary. The fetched\n   content is fully controlled by the server, which can in the worst\n   case lead to arbitrary code execution.\n\n * CVE-2025-48386, Git:\n\n   The wincred credential helper uses a static buffer (`target`) as a\n   unique key for storing and comparing against internal storage. This\n   credential helper does not properly bounds check the available\n   space remaining in the buffer before appending to it with\n   `wcsncat()`, leading to potential buffer overflows.\n\n----------------------------------------------------------------\n\nChanges since v2.50.0 are as follows:\n\nAvi Halachmi (:avih) (1):\n      gitk: encode arguments correctly with \"open\"\n\nJohannes Sixt (27):\n      gitk: treat file names beginning with \"|\" as relative paths\n      gitk: have callers of diffcmd supply pipe symbol when necessary\n      gitk: sanitize 'exec' arguments: simple cases\n      gitk: sanitize 'exec' arguments: 'eval exec'\n      gitk: sanitize 'exec' arguments: redirections\n      gitk: sanitize 'exec' arguments: redirections and background\n      gitk: sanitize 'exec' arguments: redirect to process\n      gitk: sanitize 'open' arguments: simple commands\n      gitk: sanitize 'open' arguments: simple commands with redirections\n      gitk: sanitize 'open' arguments: simple commands, readable and writable\n      gitk: collect construction of blameargs into a single conditional\n      gitk: sanitize 'open' arguments: command pipeline\n      git-gui: remove special treatment of Windows from open_cmd_pipe\n      git-gui: remove git config --list handling for git < 1.5.3\n      git-gui: treat file names beginning with \"|\" as relative paths\n      git-gui: sanitize 'exec' arguments: simple cases\n      git-gui: sanitize 'exec' arguments: background\n      git-gui: remove option --stderr from git_read\n      git-gui: break out a separate function git_read_nice\n      git-gui: use git_read in githook_read\n      gitk: sanitize 'open' arguments: revisit recently updated 'open' calls\n      git-gui: convert git_read*, git_write to be non-variadic\n      git-gui: pass redirections as separate argument to _open_stdout_stderr\n      git-gui: pass redirections as separate argument to git_read\n      git-gui: introduce function git_redir for git calls with redirections\n      git-gui: do not mistake command arguments as redirection operators\n      git-gui: sanitize 'exec' arguments: convert new 'cygpath' calls\n\nJunio C Hamano (2):\n      Git 2.49.1\n      Git 2.50.1\n\nJustin Tobler (1):\n      config: quote values containing CR character\n\nMark Levedahl (13):\n      git-gui: _which, only add .exe suffix if not present\n      git-gui: use [is_Windows], not bad _shellpath\n      git-gui: make _shellpath usable on startup\n      git-gui: remove Tcl 8.4 workaround on 2>@1 redirection\n      git-gui: use only the configured shell\n      git-gui: remove HEAD detachment implementation for git < 1.5.3\n      git-gui: remove unused proc is_shellscript\n      git-gui: avoid auto_execok for git-bash menu item\n      git-gui: avoid auto_execok in do_windows_shortcut\n      git-gui: cleanup git-bash menu item\n      git-gui: assure PATH has only absolute elements.\n      git-gui: sanitize $PATH on all platforms\n      git-gui: override exec and open only on Windows\n\nPatrick Steinhardt' via Git Security (1):\n      bundle-uri: fix arbitrary file writes via parameter injection\n\nTaylor Blau (7):\n      wincred: avoid buffer overflow in wcsncat()\n      Git 2.43.7\n      Git 2.44.4\n      Git 2.45.4\n      Git 2.46.4\n      Git 2.47.3\n      Git 2.48.2\n\n"},{"id":"521567","messageId":"aG1_eqSpH46UddZJ@teonanacatl.net","threadId":"63764","inReplyTo":"xmqqzfdevcov.fsf@gitster.g","subject":"Re: [ANNOUNCE] Git v2.50.1 and friends","fromName":"Todd Zullinger","fromEmail":"tmz@pobox.com","sentAt":"2025-07-08T20:28:42Z","receivedAt":"2025-07-08T20:28:45Z","isPatch":false,"sender":{"key":"tmz@pobox.com","avatar":"https://avatars.githubusercontent.com/u/806319?v=4"},"body":"Junio C Hamano wrote:\n> A maintenance release Git v2.50.1 and others for older maintenance\n> tracks down to maint-2.43 are now available at the usual places.\n\nI was building v2.45.4 on an older system and two tests\nfailed:\n\n    t1300.237 writing value with trailing CR not stripped on read\n    t7450.50  submodule must not checkout into different directory\n\nThese both look like they use new git config syntax (get,\nset, unset) which is not available in the older releases.\n\nI haven't done enough digging to determine when the syntax\nchanged to prepare a proper patch, but I thought I'd mention\nit, in case anyone else runs into a similar issue or is\nhighly motivated to work up a patch against which ever older\nreleases need it.\n\nThe fix looks something like this, I believe:\n\n-- >8 --\ndiff --git i/t/t1300-config.sh w/t/t1300-config.sh\nindex 00f34c5a01..3ed4a0b1ce 100755\n--- i/t/t1300-config.sh\n+++ w/t/t1300-config.sh\n@@ -2743,8 +2743,8 @@ test_expect_success 'writing value with trailing CR not stripped on read' '\n \n \tprintf \"bar\\r\\n\" >expect &&\n \tgit init cr-test &&\n-\tgit -C cr-test config set core.foo $(printf \"bar\\r\") &&\n-\tgit -C cr-test config get core.foo >actual &&\n+\tgit -C cr-test config core.foo $(printf \"bar\\r\") &&\n+\tgit -C cr-test config --get core.foo >actual &&\n \n \ttest_cmp expect actual\n '\ndiff --git i/t/t7450-bad-git-dotfiles.sh w/t/t7450-bad-git-dotfiles.sh\nindex ff63c05652..38b9db85cd 100755\n--- i/t/t7450-bad-git-dotfiles.sh\n+++ w/t/t7450-bad-git-dotfiles.sh\n@@ -388,10 +388,10 @@ test_expect_success SYMLINKS,!WINDOWS,!MINGW 'submodule must not checkout into d\n \tgit -C repo mv sub $(printf \"sub\\r\") &&\n \n \t# Ensure config values containing CR are wrapped in quotes.\n-\tgit config unset -f repo/.gitmodules submodule.sub.path &&\n+\tgit config --unset -f repo/.gitmodules submodule.sub.path &&\n \tprintf \"\\tpath = \\\"sub\\r\\\"\\n\" >>repo/.gitmodules &&\n \n-\tgit config unset -f repo/.git/modules/sub/config core.worktree &&\n+\tgit config --unset -f repo/.git/modules/sub/config core.worktree &&\n \t{\n \t\tprintf \"[core]\\n\" &&\n \t\tprintf \"\\tworktree = \\\"../../../sub\\r\\\"\\n\"\n\n-- \nTodd\n"},{"id":"521574","messageId":"20250708210529.1214574-1-tmz@pobox.com","threadId":"63764","inReplyTo":"aG1_eqSpH46UddZJ@teonanacatl.net","subject":"[PATCH] t: avoid git config syntax from newer releases","fromName":"Todd Zullinger","fromEmail":"tmz@pobox.com","sentAt":"2025-07-08T21:05:27Z","receivedAt":"2025-07-08T21:06:17Z","isPatch":true,"sender":{"key":"tmz@pobox.com","avatar":"https://avatars.githubusercontent.com/u/806319?v=4"},"body":"In a recent security release, 05e9cd64ee (config: quote values\ncontaining CR character, 2025-05-19) added calls to `git config get`,\n`git config set`, and `git config unset` which are not present on the\nmaint-2.43 branch.\n\nThese subcommands were added in the following commits, released in\ngit-2.46.0:\n\n  4e51389000 (builtin/config: introduce \"get\" subcommand, 2024-05-06),\n  00bbdde141 (builtin/config: introduce \"set\" subcommand, 2024-05-06),\n  95ea69c67b (builtin/config: introduce \"unset\" subcommand, 2024-05-06)\n\nRevert to the previous `git config` syntax for older maintenance\nbranches.\n\nSigned-off-by: Todd Zullinger <tmz@pobox.com>\n---\n\nThis is based on maint-2.43.  I tested that it merges cleanly to 2.44 and 2.45.\nI have only run a build with 2.45.4 so far.  I pushed this to a github fork,\nwhich looks like it will run the CI for each branch:\n\n    https://github.com/tmzullinger/git/actions\n\n t/t1300-config.sh           | 4 ++--\n t/t7450-bad-git-dotfiles.sh | 4 ++--\n 2 files changed, 4 insertions(+), 4 deletions(-)\n\ndiff --git a/t/t1300-config.sh b/t/t1300-config.sh\nindex 1010410b7e..baf9b48231 100755\n--- a/t/t1300-config.sh\n+++ b/t/t1300-config.sh\n@@ -2595,8 +2595,8 @@ test_expect_success 'writing value with trailing CR not stripped on read' '\n \n \tprintf \"bar\\r\\n\" >expect &&\n \tgit init cr-test &&\n-\tgit -C cr-test config set core.foo $(printf \"bar\\r\") &&\n-\tgit -C cr-test config get core.foo >actual &&\n+\tgit -C cr-test config core.foo $(printf \"bar\\r\") &&\n+\tgit -C cr-test config --get core.foo >actual &&\n \n \ttest_cmp expect actual\n '\ndiff --git a/t/t7450-bad-git-dotfiles.sh b/t/t7450-bad-git-dotfiles.sh\nindex 2026285566..d1546e3311 100755\n--- a/t/t7450-bad-git-dotfiles.sh\n+++ b/t/t7450-bad-git-dotfiles.sh\n@@ -362,10 +362,10 @@ test_expect_success SYMLINKS,!WINDOWS,!MINGW 'submodule must not checkout into d\n \tgit -C repo mv sub $(printf \"sub\\r\") &&\n \n \t# Ensure config values containing CR are wrapped in quotes.\n-\tgit config unset -f repo/.gitmodules submodule.sub.path &&\n+\tgit config --unset -f repo/.gitmodules submodule.sub.path &&\n \tprintf \"\\tpath = \\\"sub\\r\\\"\\n\" >>repo/.gitmodules &&\n \n-\tgit config unset -f repo/.git/modules/sub/config core.worktree &&\n+\tgit config --unset -f repo/.git/modules/sub/config core.worktree &&\n \t{\n \t\tprintf \"[core]\\n\" &&\n \t\tprintf \"\\tworktree = \\\"../../../sub\\r\\\"\\n\"\n-- \n2.50.1\n"},{"id":"521582","messageId":"xmqqqzyqs5cx.fsf@gitster.g","threadId":"63764","inReplyTo":"20250708210529.1214574-1-tmz@pobox.com","subject":"Re: [PATCH] t: avoid git config syntax from newer releases","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-07-08T22:08:30Z","receivedAt":"2025-07-08T22:08:33Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Todd Zullinger <tmz@pobox.com> writes:\n\n> In a recent security release, 05e9cd64ee (config: quote values\n> containing CR character, 2025-05-19) added calls to `git config get`,\n> `git config set`, and `git config unset` which are not present on the\n> maint-2.43 branch.\n>\n> These subcommands were added in the following commits, released in\n> git-2.46.0:\n>\n>   4e51389000 (builtin/config: introduce \"get\" subcommand, 2024-05-06),\n>   00bbdde141 (builtin/config: introduce \"set\" subcommand, 2024-05-06),\n>   95ea69c67b (builtin/config: introduce \"unset\" subcommand, 2024-05-06)\n>\n> Revert to the previous `git config` syntax for older maintenance\n> branches.\n>\n> Signed-off-by: Todd Zullinger <tmz@pobox.com>\n> ---\n> ...\n> This is based on maint-2.43.  I tested that it merges cleanly to 2.44 and 2.45.\n> I have only run a build with 2.45.4 so far.\n\nThanks, will queue.\n\n"},{"id":"521678","messageId":"iuravzuqoqagie37is72e773zufuxcedwnc4i6ehhklpszg25t@bzu66havljcq","threadId":"63764","inReplyTo":"20250708210529.1214574-1-tmz@pobox.com","subject":"Re: [PATCH] t: avoid git config syntax from newer releases","fromName":"Justin Tobler","fromEmail":"jltobler@gmail.com","sentAt":"2025-07-09T14:30:16Z","receivedAt":"2025-07-09T14:35:53Z","isPatch":true,"sender":{"key":"jltobler@gmail.com","avatar":"https://avatars.githubusercontent.com/u/53454972?v=4"},"body":"On 25/07/08 05:05PM, Todd Zullinger wrote:\n> In a recent security release, 05e9cd64ee (config: quote values\n> containing CR character, 2025-05-19) added calls to `git config get`,\n> `git config set`, and `git config unset` which are not present on the\n> maint-2.43 branch.\n> \n> These subcommands were added in the following commits, released in\n> git-2.46.0:\n> \n>   4e51389000 (builtin/config: introduce \"get\" subcommand, 2024-05-06),\n>   00bbdde141 (builtin/config: introduce \"set\" subcommand, 2024-05-06),\n>   95ea69c67b (builtin/config: introduce \"unset\" subcommand, 2024-05-06)\n> \n> Revert to the previous `git config` syntax for older maintenance\n> branches.\n\nThanks for raising this fix! Apologies, it slipped my mind that the\nconfig subsommands wouldn't be available on older versions.\n\nThe changes here look good to me. :)\n\n-Justin\n\n> \n> Signed-off-by: Todd Zullinger <tmz@pobox.com>\n> ---\n> \n> This is based on maint-2.43.  I tested that it merges cleanly to 2.44 and 2.45.\n> I have only run a build with 2.45.4 so far.  I pushed this to a github fork,\n> which looks like it will run the CI for each branch:\n> \n>     https://github.com/tmzullinger/git/actions\n> \n>  t/t1300-config.sh           | 4 ++--\n>  t/t7450-bad-git-dotfiles.sh | 4 ++--\n>  2 files changed, 4 insertions(+), 4 deletions(-)\n> \n> diff --git a/t/t1300-config.sh b/t/t1300-config.sh\n> index 1010410b7e..baf9b48231 100755\n> --- a/t/t1300-config.sh\n> +++ b/t/t1300-config.sh\n> @@ -2595,8 +2595,8 @@ test_expect_success 'writing value with trailing CR not stripped on read' '\n>  \n>  \tprintf \"bar\\r\\n\" >expect &&\n>  \tgit init cr-test &&\n> -\tgit -C cr-test config set core.foo $(printf \"bar\\r\") &&\n> -\tgit -C cr-test config get core.foo >actual &&\n> +\tgit -C cr-test config core.foo $(printf \"bar\\r\") &&\n> +\tgit -C cr-test config --get core.foo >actual &&\n>  \n>  \ttest_cmp expect actual\n>  '\n> diff --git a/t/t7450-bad-git-dotfiles.sh b/t/t7450-bad-git-dotfiles.sh\n> index 2026285566..d1546e3311 100755\n> --- a/t/t7450-bad-git-dotfiles.sh\n> +++ b/t/t7450-bad-git-dotfiles.sh\n> @@ -362,10 +362,10 @@ test_expect_success SYMLINKS,!WINDOWS,!MINGW 'submodule must not checkout into d\n>  \tgit -C repo mv sub $(printf \"sub\\r\") &&\n>  \n>  \t# Ensure config values containing CR are wrapped in quotes.\n> -\tgit config unset -f repo/.gitmodules submodule.sub.path &&\n> +\tgit config --unset -f repo/.gitmodules submodule.sub.path &&\n>  \tprintf \"\\tpath = \\\"sub\\r\\\"\\n\" >>repo/.gitmodules &&\n>  \n> -\tgit config unset -f repo/.git/modules/sub/config core.worktree &&\n> +\tgit config --unset -f repo/.git/modules/sub/config core.worktree &&\n>  \t{\n>  \t\tprintf \"[core]\\n\" &&\n>  \t\tprintf \"\\tworktree = \\\"../../../sub\\r\\\"\\n\"\n> -- \n> 2.50.1\n"},{"id":"521699","messageId":"aG6T5ylikwrGEEo2@teonanacatl.net","threadId":"63764","inReplyTo":"iuravzuqoqagie37is72e773zufuxcedwnc4i6ehhklpszg25t@bzu66havljcq","subject":"Re: [PATCH] t: avoid git config syntax from newer releases","fromName":"Todd Zullinger","fromEmail":"tmz@pobox.com","sentAt":"2025-07-09T16:08:07Z","receivedAt":"2025-07-09T16:08:10Z","isPatch":true,"sender":{"key":"tmz@pobox.com","avatar":"https://avatars.githubusercontent.com/u/806319?v=4"},"body":"Justin Tobler wrote:\n> On 25/07/08 05:05PM, Todd Zullinger wrote:\n>> In a recent security release, 05e9cd64ee (config: quote values\n>> containing CR character, 2025-05-19) added calls to `git config get`,\n>> `git config set`, and `git config unset` which are not present on the\n>> maint-2.43 branch.\n>> \n>> These subcommands were added in the following commits, released in\n>> git-2.46.0:\n>> \n>>   4e51389000 (builtin/config: introduce \"get\" subcommand, 2024-05-06),\n>>   00bbdde141 (builtin/config: introduce \"set\" subcommand, 2024-05-06),\n>>   95ea69c67b (builtin/config: introduce \"unset\" subcommand, 2024-05-06)\n>> \n>> Revert to the previous `git config` syntax for older maintenance\n>> branches.\n> \n> Thanks for raising this fix! Apologies, it slipped my mind that the\n> config subsommands wouldn't be available on older versions.\n\nNo worries.  Thanks for working on these CVE fixes!\n\nI thought that the CI might catch those failures, but I\nimagine they slipped past others as easily as some other\nfailures slipped past me last night.\n\nThere are unrelated test failures on those older maint\nbranches which make noticing any new test failures less\nlikely.  Even more so when you're working on a security\nissue and there is less time and fewer eyes on some of the\nless important details. :)\n\nI looked at a couple of the failed jobs at the time and they\nwere unrelated to the tests I'd changed.  I incorrectly\npresumed that was the reason for all of the failures.\n\nA few (linux-leaks (ubuntu-latest), linux-reftable-leaks\n(ubuntu-latest) failed t7450.50 (submodule must not checkout\ninto different directory) with:\n\n  + printf sub\\r\n  + git -C repo mv sub sub\n  Aborted (core dumped)\n  error: last command exited with $?=134\n  + rm -rf sub repo bad-clone\n  + exit 134\n  + eval_ret=134\n  + :\n  not ok 50 - submodule must not checkout into different directory\n\nI don't know if that is worth looking at, given the age of\nthese maint branches.\n\nWhile I was poking though, here are the other failures from\nthe maint-2.45 branch runs at GitHub:\n\nSeveral jobs (linux-musl (alpine), osx-gcc (macos-13))\nfailed in imap-send.c and http.c, with:\n\n    call to '_curl_easy_setopt_err_long' declared with\n    attribute warning: curl_easy_setopt expects a long\n    argument [-Werror=attribute-warning]\n\nI think this has been fixed in later releases.  It rings a\ntiny bell, anyway.\n\nThe 'pedantic (fedora)' and 'win build' jobs both failed\nwith:\n\n  Error: object-file.c:58:9: initializer-string for array of\n  'unsigned char' truncates NUL terminator but destination\n  lacks 'nonstring' attribute (33 chars into 32 available)\n  [-Werror=unterminated-string-initialization]\n     58 |         \"\\x47\\x3a\\x0f\\x4c\\x3b\\xe8\\xa9\\x36\\x81\\xa2\" \\\n        |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n  object-file.c:80:17: note: in expansion of macro 'EMPTY_BLOB_SHA256_BIN_LITERAL'\n     80 |         .hash = EMPTY_BLOB_SHA256_BIN_LITERAL,\n        |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nwhich I presume is also fixed in later releases and may not\nbe worth fixing on these old maintenance branches.\n\n> The changes here look good to me. :)\n\nThanks for the extra eyes.\n\n-- \nTodd\n"}]}