git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 1/4 v8] config: read (but not write) from $XDG_CONFIG_HOME/git/config file

From
Thomas Rast <trast@student.ethz.ch>
Date
Jul 12, 2012, 07:55 UTC
Message-ID
<877gu9wh05.fsf@thomas.inf.ethz.ch>
In-Reply-To
<1340355806-6894-2-git-send-email-Matthieu.Moy@imag.fr>
Hi all,

This patch causes valgrind warnings in t1300.81 (get --path copes with unset $HOME) about passing NULL to access():

==25286== Syscall param access(pathname) points to unaddressable byte(s) ==25286== at 0x56E2227: access (in /lib64/libc-2.14.1.so) ==25286== by 0x48CA42: git_config_early (config.c:948) ==25286== by 0x4F0C20: check_repository_format_gently (setup.c:369) ==25286== by 0x4F1A52: setup_git_directory_gently_1 (setup.c:531) ==25286== by 0x4F24ED: setup_git_directory_gently (setup.c:725) ==25286== by 0x405D8C: run_builtin (git.c:287) ==25286== by 0x40548E: main (git.c:467) ==25286== Address 0x0 is not stack'd, malloc'd or (recently) free'd

AFAICT it is this bit of code:
Matthieu Moy <Matthieu.Moy@imag.fr> writes:
Show 9 quoted lines
> +void home_config_paths(char **global, char **xdg, char *file)
> +{
> +	char *xdg_home = getenv("XDG_CONFIG_HOME");
> +	char *home = getenv("HOME");
> +	char *to_free = NULL;
> +
> +	if (!home) {
> +		if (global)
> +			*global = NULL;
[...]
Show 32 quoted lines
>  int git_config_early(config_fn_t fn, void *data, const char *repo_config)
>  {
>  	int ret = 0, found = 0;
> -	const char *home = NULL;
> +	char *xdg_config = NULL;
> +	char *user_config = NULL;
> +
> +	home_config_paths(&user_config, &xdg_config, "config");
>  
>  	if (git_config_system() && !access(git_etc_gitconfig(), R_OK)) {
>  		ret += git_config_from_file(fn, git_etc_gitconfig(),
> @@ -937,14 +940,14 @@ int git_config_early(config_fn_t fn, void *data, const char *repo_config)
>  		found += 1;
>  	}
>  
> -	home = getenv("HOME");
> -	if (home) {
> -		char buf[PATH_MAX];
> -		char *user_config = mksnpath(buf, sizeof(buf), "%s/.gitconfig", home);
> -		if (!access(user_config, R_OK)) {
> -			ret += git_config_from_file(fn, user_config, data);
> -			found += 1;
> -		}
> +	if (!access(xdg_config, R_OK)) {
> +		ret += git_config_from_file(fn, xdg_config, data);
> +		found += 1;
> +	}
> +
> +	if (!access(user_config, R_OK)) {
> +		ret += git_config_from_file(fn, user_config, data);
> +		found += 1;
>  	}

That is, while the old code was careful about home==NULL, the new code checks this only in home_config_paths(); after that, it does no further NULL check.

There's a similar instance in your changes to cmd_config(), found by running 'unset HOME; valgrind git config --global --get foo.bar':

==27841== Syscall param access(pathname) points to unaddressable byte(s) ==27841== at 0x56E2227: access (in /lib64/libc-2.14.1.so) ==27841== by 0x425280: cmd_config (config.c:390) ==27841== by 0x405C34: run_builtin (git.c:306) ==27841== by 0x40548E: main (git.c:467) ==27841== Address 0x0 is not stack'd, malloc'd or (recently) free'd

around here:
> @@ -379,13 +382,20 @@ int cmd_config(int argc, const char **argv, const char *prefix)
[...]
Show 6 quoted lines
> +		char *user_config = NULL;
> +		char *xdg_config = NULL;
> +
> +		home_config_paths(&user_config, &xdg_config, "config");
> +
> +		if (access(user_config, R_OK) && !access(xdg_config, R_OK) &&
Can you fix this?
-- 
Thomas Rast
trast@{inf,student}.ethz.ch
Previous: Matthieu MoyNext: Matthieu Moy
Message 57 of 88 in “[PATCHv2] Possibility to read both from ~/.gitconfig and from $XDG_CONFIG_HOME/git/config”
  1. Huynh Khoi Nguyen NGUYENMay 30, 2012
  2. Junio C HamanoMay 30, 2012
  3. Ramsay JonesMay 31, 2012
  4. [PATCHv3] Read from XDG configuration file, not writeHuynh Khoi Nguyen NGUYEN, May 31, 2012
  5. Junio C HamanoMay 31, 2012
  6. [PATCHv4] Read (but not write) from XDG configuration, XDG attributes and XDG ignore filesHuynh Khoi Nguyen NGUYEN, Jun 1, 2012
  7. Matthieu MoyJun 2, 2012
  8. nguyenhu@minatec.inpg.frJun 2, 2012
  9. Matthieu MoyJun 2, 2012
  10. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  11. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  12. Matthieu MoyJun 4, 2012
  13. nguyenhu@minatec.inpg.frJun 5, 2012
  14. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  15. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 3, 2012
  16. Matthieu MoyJun 4, 2012
  17. nguyenhu@minatec.inpg.frJun 5, 2012
  18. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  19. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  20. Junio C HamanoJun 7, 2012
  21. Matthieu MoyJun 8, 2012
  22. nguyenhu@minatec.inpg.frJun 8, 2012
  23. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  24. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen NGUYEN, Jun 6, 2012
  25. David AguilarJun 9, 2012
  26. Junio C HamanoJun 9, 2012
  27. David AguilarJun 9, 2012
  28. Matthieu MoyJun 10, 2012
  29. nguyenhu@minatec.inpg.frJun 11, 2012
  30. Junio C HamanoJun 7, 2012
  31. nguyenhu@minatec.inpg.frJun 8, 2012
  32. Ramsay JonesJun 12, 2012
  33. nguyenhu@minatec.inpg.frJun 8, 2012
  34. Erik Faye-LundJun 8, 2012
  35. nguyenhu@minatec.inpg.frJun 8, 2012
  36. Erik Faye-LundJun 8, 2012
  37. Junio C HamanoJun 8, 2012
  38. nguyenhu@minatec.inpg.frJun 9, 2012
  39. Junio C HamanoJun 10, 2012
  40. nguyenhu@minatec.inpg.frJun 10, 2012
  41. Erik Faye-LundJun 10, 2012
  42. nguyenhu@minatec.inpg.frJun 10, 2012
  43. Erik Faye-LundJun 10, 2012
  44. Junio C HamanoJun 11, 2012
  45. nguyenhu@minatec.inpg.frJun 11, 2012
  46. nguyenhu@minatec.inpg.frJun 11, 2012
  47. Erik Faye-LundJun 11, 2012
  48. 1/4 Read (but not write) from $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  49. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  50. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/attributesHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  51. 4/4 Write to $XDG_CONFIG_HOME/git/config fileHuynh Khoi Nguyen Nguyen, Jun 12, 2012
  52. Ramsay JonesJun 14, 2012
  53. Matthieu MoyJun 21, 2012
  54. Junio C HamanoJun 21, 2012
  55. 0/4 Git configuration directoryMatthieu Moy, Jun 22, 2012
  56. 1/4 config: read (but not write) from $XDG_CONFIG_HOME/git/config fileMatthieu Moy, Jun 22, 2012
  57. Thomas RastJul 12, 2012
  58. config: fix several access(NULL) callsMatthieu Moy, Jul 12, 2012
  59. Thomas RastJul 12, 2012
  60. Junio C HamanoJul 12, 2012
  61. Matthieu MoyJul 12, 2012
  62. Junio C HamanoJul 12, 2012
  63. Matthieu MoyJul 13, 2012
  64. config: fix several access(NULL) callsMatthieu Moy, Jul 13, 2012
  65. Jeff KingJul 13, 2012
  66. Matthieu MoyJul 13, 2012
  67. Thomas RastJul 13, 2012
  68. Matthieu MoyJul 13, 2012
  69. Junio C HamanoJul 13, 2012
  70. Matthieu MoyJul 16, 2012
  71. Junio C HamanoJul 16, 2012
  72. Matthieu MoyJul 16, 2012
  73. Junio C HamanoJul 16, 2012
  74. 2/4 Let core.excludesfile default to $XDG_CONFIG_HOME/git/ignoreMatthieu Moy, Jun 22, 2012
  75. 3/4 Let core.attributesfile default to $XDG_CONFIG_HOME/git/ignoreMatthieu Moy, Jun 22, 2012
  76. Junio C HamanoJun 22, 2012
  77. Matthieu MoyJun 25, 2012
  78. Junio C HamanoJun 25, 2012
  79. Matthieu MoyJun 25, 2012
  80. 4/4 config: write to $XDG_CONFIG_HOME/git/config file if appropriateMatthieu Moy, Jun 22, 2012
  81. Junio C HamanoJun 22, 2012
  82. Matthieu MoyJun 25, 2012
  83. Junio C HamanoJun 25, 2012
  84. Junio C HamanoJun 22, 2012
  85. Ramsay JonesJun 4, 2012
  86. Junio C HamanoJun 4, 2012
  87. Ramsay JonesJun 12, 2012
  88. nguyenhu@minatec.inpg.frJun 5, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.