{"action":"opened","issue":{"url":"https://api.github.com/repos/proj4-bot/proj.4/issues/69","labels_url":"https://api.github.com/repos/proj4-bot/proj.4/issues/69/labels{/name}","comments_url":"https://api.github.com/repos/proj4-bot/proj.4/issues/69/comments","events_url":"https://api.github.com/repos/proj4-bot/proj.4/issues/69/events","html_url":"https://github.com/proj4-bot/proj.4/issues/69","id":79329101,"number":69,"title":"valgrind error in pj_init because of setlocale()","user":{"login":"proj4-bot","id":12542084,"avatar_url":"https://avatars.githubusercontent.com/u/12542084?v=3","gravatar_id":"","url":"https://api.github.com/users/proj4-bot","html_url":"https://github.com/proj4-bot","followers_url":"https://api.github.com/users/proj4-bot/followers","following_url":"https://api.github.com/users/proj4-bot/following{/other_user}","gists_url":"https://api.github.com/users/proj4-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/proj4-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/proj4-bot/subscriptions","organizations_url":"https://api.github.com/users/proj4-bot/orgs","repos_url":"https://api.github.com/users/proj4-bot/repos","events_url":"https://api.github.com/users/proj4-bot/events{/privacy}","received_events_url":"https://api.github.com/users/proj4-bot/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/proj4-bot/proj.4/labels/bug","name":"bug","color":"fc2929"},{"url":"https://api.github.com/repos/proj4-bot/proj.4/labels/C:%20Core","name":"C: Core","color":"0000aa"},{"url":"https://api.github.com/repos/proj4-bot/proj.4/labels/P:%20major","name":"P: major","color":"f6f6f6"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":0,"created_at":"2015-05-22T07:19:52Z","updated_at":"2015-05-22T07:19:52Z","closed_at":null,"body":"**Reported by chehrlic on 14 Mar 2010 09:42 UTC**\nThe way the old locale is saved / restored in pj_init() does not work when I set setlocale() before. Here the example code:\r\n\r\n```\r\n#include <locale.h>\r\n#include <stdio.h>\r\n\r\nint main(int argc, char** argv)\r\n{\r\n  // done in my main program\r\n  setlocale(LC_NUMERIC, \"de_DE\");\r\n\r\n  // pj_init()\r\n  const char *cur_locale = setlocale(LC_NUMERIC, NULL);\r\n  fprintf(stderr, \"cur_locale: %s\\n\", cur_locale);\r\n  const char *cur_locale2 = setlocale(LC_NUMERIC, \"C\");\r\n  fprintf(stderr, \"cur_locale2: %s\\n\", cur_locale2);\r\n\r\n  setlocale(LC_NUMERIC, cur_locale);\r\n  return 0;\r\n}\r\n\r\n// compile with\r\ng++ -g main.cpp\r\n// check with valgrind\r\nvalgrind ./a.out\r\n```\r\n\r\nThe problem is that the third call to setlocale() deletes the memory returned by the second setlocale() call:\r\n\r\n```\r\n==25671== Memcheck, a memory error detector                                                 \r\n==25671== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.                   \r\n==25671== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info                 \r\n==25671== Command: ./a.out                                                                  \r\n==25671==                                                                                   \r\ncur_locale: de_DE                                                                           \r\ncur_locale2: C                                                                              \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25531: strcmp (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBAD1: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x55CC28E: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x55CC2A0: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25531: strcmp (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC2C7: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25531: strcmp (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC2DA: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C24ED1: index (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) \r\n==25671==    by 0x55CCE8C: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CC2F2: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C24EE4: index (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) \r\n==25671==    by 0x55CCE8C: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CC2F2: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f1 is 1 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x562245C: strcasecmp (in /lib64/libc-2.10.1.so)                            \r\n==25671==    by 0x55D6B1F: bsearch (in /lib64/libc-2.10.1.so)                               \r\n==25671==    by 0x55D2541: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CC3CF: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x55CC3E5: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256E8: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC40B: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f5 is 5 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256F1: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC40B: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f4 is 4 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256FC: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC40B: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f3 is 3 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25707: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC40B: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f2 is 2 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25748: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CC40B: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBB83: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f1 is 1 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25242: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x561ECF5: strdup (in /lib64/libc-2.10.1.so)                                \r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f0 is 0 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C25254: strlen (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x561ECF5: strdup (in /lib64/libc-2.10.1.so)                                \r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f1 is 1 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256E8: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f5 is 5 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256F1: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f4 is 4 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)  \r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)                                   \r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400710: main (main.cpp:11)                                                \r\n==25671==                                                                                   \r\n==25671== Invalid read of size 1                                                            \r\n==25671==    at 0x4C256FC: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)                             \r\n==25671==    by 0x400742: main (main.cpp:14)                                                \r\n==25671==  Address 0x58ff8f3 is 3 bytes inside a block of size 6 free'd                     \r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x400710: main (main.cpp:11)\r\n==25671==\r\n==25671== Invalid read of size 1\r\n==25671==    at 0x4C25707: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x400742: main (main.cpp:14)\r\n==25671==  Address 0x58ff8f2 is 2 bytes inside a block of size 6 free'd\r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x400710: main (main.cpp:11)\r\n==25671==\r\n==25671== Invalid read of size 1\r\n==25671==    at 0x4C25748: memcpy (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CBBBB: setlocale (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x400742: main (main.cpp:14)\r\n==25671==  Address 0x58ff8f1 is 1 bytes inside a block of size 6 free'd\r\n==25671==    at 0x4C23DD8: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)\r\n==25671==    by 0x55CB80D: ??? (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x55CBC08: setlocale (in /lib64/libc-2.10.1.so)\r\n==25671==    by 0x400710: main (main.cpp:11)\r\n==25671==\r\n==25671==\r\n==25671== HEAP SUMMARY:\r\n==25671==     in use at exit: 0 bytes in 0 blocks\r\n==25671==   total heap usage: 16 allocs, 16 frees, 5,933 bytes allocated\r\n==25671==\r\n==25671== All heap blocks were freed -- no leaks are possible\r\n==25671==\r\n==25671== For counts of detected and suppressed errors, rerun with: -v\r\n==25671== ERROR SUMMARY: 46 errors from 21 contexts (suppressed: 4 from 4)\r\n```\r\n\n\nMigrated-From: https://trac.osgeo.org/proj/ticket/69"}}