[Buildroot] [git commit] purge-locales: Handle empty locale directories better

Peter Korsgaard peter at korsgaard.com
Thu Apr 28 21:48:09 UTC 2016


commit: https://git.buildroot.net/buildroot/commit/?id=bbe29b9896d5a6a3b10c999522bb0ac29e934b51
branch: https://git.buildroot.net/buildroot/commit/?id=refs/heads/master

If a locale directory is empty, shell code like "for langdir in
$$dir/*;" will loop once with langdir set to "path/to/dir/*", rather
than not looping at all, which would obviously be the desired
behavior.

Then "grep -qx $${langdir##*/}" ungoes two shell expansions (how?)
that transform the expression from "${langdir##*/}" to "*" to "list of
all files in buildroot root dir".  Which is most certainly not what
this command was supposed to do.

If one of those files happens to be an 8GB flash image, grep consumes
all available memory and crashes trying to search it.

Signed-off-by: Trent Piepho <tpiepho at kymetacorp.com>
Signed-off-by: Peter Korsgaard <peter at korsgaard.com>
---
 Makefile | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile
index 0e4beb2..daa32a4 100644
--- a/Makefile
+++ b/Makefile
@@ -583,7 +583,10 @@ define PURGE_LOCALES
 	do \
 		for langdir in $$dir/*; \
 		do \
-			grep -qx $${langdir##*/} $(LOCALE_WHITELIST) || rm -rf $$langdir; \
+			if [ -e "$${langdir}" ]; \
+			then \
+				grep -qx "$${langdir##*/}" $(LOCALE_WHITELIST) || rm -rf $$langdir; \
+			fi \
 		done; \
 	done
 	if [ -d $(TARGET_DIR)/usr/share/X11/locale ]; \


More information about the buildroot mailing list