Invalid/incorrect use of printf makes the build fail

Osipov, Michael (LDA IT IN) michael.osipov at siemens.com
Fri Jan 27 08:12:56 UTC 2023


Thank you very much for filing the issue! Would you mind to add those 
the JBS issue as well for reference:

[1] https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=267690
[2] https://bz-attachments.freebsd.org/attachment.cgi?id=237999
[3] https://bz-attachments.freebsd.org/attachment.cgi?id=238000

Michael

Am 2023-01-26 um 21:40 schrieb erik.joelsson at oracle.com:
> Thanks for the report, filed https://bugs.openjdk.org/browse/JDK-8301197.
> 
> /Erik
> 
> On 1/26/23 11:39, Osipov, Michael (LDA IT PLM 2) wrote:
>> Hi folks,
>>
>> this is the upstream report for this downstream bug [1]:
>> It basically boils down to that printf is used in .m4 and .sh files, 
>> but not formatting with %s, but rather direct variable expansion:
>> > printf "$foo\n"
>> rather than
>> > printf "%s\n" $foo
>>
>> In the downstream bug the following makes the build fail:
>> > ./configure ... 
>> --with-vendor-bug-url='https://bugs.freebsd.org/bugzilla/enter_bug.cgi?product=Ports%20%26%20Packages&component=Individual%20Port(s)&short_desc=java/${PORTNAME}${JDK_MAJOR_VERSION}%3A%20'
>>
>> since the value contains percent char and the printf statement uses 
>> $var instead of %s $var printf tries to interprete it.
>>
>> I see these invalid usages:
>> > $ grep -r --include='*.sh' --include='*.m4' printf jdk* 
>> --color=force | grep -v % | grep --color=always \\$
>> > jdk11u-dev/make/autoconf/help.m4:    printf "using configure 
>> arguments '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Debug level: 
>> $DEBUG_LEVEL\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* HS debug level: 
>> $HOTSPOT_DEBUG_LEVEL\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* JVM variants: 
>> $JVM_VARIANTS\n"
>> > jdk11u-dev/make/autoconf/help.m4:    printf "$variant: 
>> \'$JVM_FEATURES_FOR_VARIANT\' "
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* OpenJDK target: OS: 
>> $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, 
>> address length: $OPENJDK_TARGET_CPU_BITS\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Version string: 
>> $VERSION_STRING ($VERSION_SHORT)\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Boot JDK: 
>> $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Toolchain: 
>> $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* C Compiler: Version 
>> $CC_VERSION_NUMBER (at ${CC#"$FIXPATH "})\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* C++ Compiler: Version 
>> $CXX_VERSION_NUMBER (at ${CXX#"$FIXPATH "})\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Cores to use: $JOBS\n"
>> > jdk11u-dev/make/autoconf/help.m4:  printf "* Memory limit: 
>> $MEMORY_SIZE MB\n"
>> > jdk11u-dev/make/autoconf/help.m4:    printf "* ccache status: 
>> $CCACHE_STATUS\n"
>> > jdk11u-dev/make/autoconf/help.m4:    printf "$FOUND_ALT_VARIABLES\n"
>> > jdk11u-dev/test/jdk/java/lang/ProcessBuilder/InheritIO/InheritIO.sh: 
>>       'InheritIO$'${TEST_NAME} printf message > stdout.txt 2> stderr.txt
>> > jdk11u-dev/test/jdk/java/lang/Thread/UncaughtExceptions.sh: printf 
>> "$name:\n"; cat "$got"
>> > jdk17u-dev/make/autoconf/help.m4:    printf "using configure 
>> arguments '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Name: $CONF_NAME\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Debug level: 
>> $DEBUG_LEVEL\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* HS debug level: 
>> $HOTSPOT_DEBUG_LEVEL\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* JVM variants: 
>> $JVM_VARIANTS\n"
>> > jdk17u-dev/make/autoconf/help.m4:    printf "$variant: 
>> \'$JVM_FEATURES_FOR_VARIANT\' "
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* OpenJDK target: OS: 
>> $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, 
>> address length: $OPENJDK_TARGET_CPU_BITS\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Version string: 
>> $VERSION_STRING ($VERSION_SHORT)\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Boot JDK: 
>> $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Toolchain: 
>> $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* C Compiler: Version 
>> $CC_VERSION_NUMBER (at ${CC#"$FIXPATH "})\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* C++ Compiler: Version 
>> $CXX_VERSION_NUMBER (at ${CXX#"$FIXPATH "})\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Cores to use: $JOBS\n"
>> > jdk17u-dev/make/autoconf/help.m4:  printf "* Memory limit: 
>> $MEMORY_SIZE MB\n"
>> > jdk17u-dev/make/autoconf/help.m4:    printf "* ccache status: 
>> $CCACHE_STATUS\n"
>> > jdk17u-dev/make/autoconf/help.m4:    printf "$FOUND_ALT_VARIABLES\n"
>> > jdk17u-dev/test/micro/org/openjdk/bench/java/nio/genBuffers.sh: 
>> printf "}\n" >> $out
>> > jdk20u/make/autoconf/help.m4:    printf "using configure arguments 
>> '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk20u/make/autoconf/help.m4:    printf "The original configure 
>> invocation was '$REAL_CONFIGURE_COMMAND_EXEC_SHORT 
>> $REAL_CONFIGURE_COMMAND_LINE'.\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Name: $CONF_NAME\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Debug level: $DEBUG_LEVEL\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* HS debug level: 
>> $HOTSPOT_DEBUG_LEVEL\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* JVM variants: $JVM_VARIANTS\n"
>> > jdk20u/make/autoconf/help.m4:    printf "$variant: 
>> \'$JVM_FEATURES_FOR_VARIANT\' "
>> > jdk20u/make/autoconf/help.m4:  printf "* OpenJDK target: OS: 
>> $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, 
>> address length: $OPENJDK_TARGET_CPU_BITS\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Version string: 
>> $VERSION_STRING ($VERSION_SHORT)\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Source date: 
>> $source_date_info\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Boot JDK: $BOOT_JDK_VERSION 
>> (at $BOOT_JDK)\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Toolchain: $TOOLCHAIN_TYPE 
>> ($TOOLCHAIN_DESCRIPTION)\n"
>> > jdk20u/make/autoconf/help.m4:    printf "* Devkit: $DEVKIT_NAME 
>> ($DEVKIT_ROOT)\n"
>> > jdk20u/make/autoconf/help.m4:    printf "* Devkit: $DEVKIT_ROOT\n"
>> > jdk20u/make/autoconf/help.m4:    printf "* Sysroot: $SYSROOT\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* C Compiler: Version 
>> $CC_VERSION_NUMBER (at ${CC#"$FIXPATH "})\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* C++ Compiler: Version 
>> $CXX_VERSION_NUMBER (at ${CXX#"$FIXPATH "})\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Build jobs: $JOBS\n"
>> > jdk20u/make/autoconf/help.m4:  printf "* Memory limit: $MEMORY_SIZE 
>> MB\n"
>> > jdk20u/make/autoconf/help.m4:    printf "* ccache status: 
>> $CCACHE_STATUS\n"
>> > jdk20u/make/autoconf/help.m4:    printf "$FOUND_ALT_VARIABLES\n"
>> > jdk20u/test/micro/org/openjdk/bench/java/nio/genBuffers.sh: printf 
>> "}\n" >> $out
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf 
>> "$OUTPUT_ROOT\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:    printf "using 
>> configure arguments '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* Debug 
>> level:    $DEBUG_LEVEL\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* JDK 
>> variant:    $JDK_VARIANT\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* JVM 
>> variants:   $with_jvm_variants\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* OpenJDK 
>> target: OS: $OPENJDK_TARGET_OS, CPU architecture: 
>> $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:    printf "* 
>> Environment:    $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root 
>> at $WINDOWS_ENV_ROOT_PATH)\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* Boot 
>> JDK:       $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* 
>> Toolchain:      $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* C 
>> Compiler:     Version $CC_VERSION_NUMBER (at $CC)\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* C++ 
>> Compiler:   Version $CXX_VERSION_NUMBER (at $CXX)\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* Cores 
>> to use:   $JOBS\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:  printf "* Memory 
>> limit:   $MEMORY_SIZE MB\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:    printf "* 
>> ccache status:  $CCACHE_STATUS\n"
>> > jdk8u-dev/common/autoconf/generated-configure.sh:    printf 
>> "$FOUND_ALT_VARIABLES\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "$OUTPUT_ROOT\n"
>> > jdk8u-dev/common/autoconf/help.m4:    printf "using configure 
>> arguments '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* Debug level: 
>> $DEBUG_LEVEL\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* JDK variant: 
>> $JDK_VARIANT\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* JVM variants: 
>> $with_jvm_variants\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* OpenJDK target: OS: 
>> $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, 
>> address length: $OPENJDK_TARGET_CPU_BITS\n"
>> > jdk8u-dev/common/autoconf/help.m4:    printf "* Environment: 
>> $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at 
>> $WINDOWS_ENV_ROOT_PATH)\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* Boot JDK: 
>> $BOOT_JDK_VERSION (at $BOOT_JDK)\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* Toolchain: 
>> $TOOLCHAIN_TYPE ($TOOLCHAIN_DESCRIPTION)\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* C Compiler: Version 
>> $CC_VERSION_NUMBER (at $CC)\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* C++ Compiler: Version 
>> $CXX_VERSION_NUMBER (at $CXX)\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* Cores to use: $JOBS\n"
>> > jdk8u-dev/common/autoconf/help.m4:  printf "* Memory limit: 
>> $MEMORY_SIZE MB\n"
>> > jdk8u-dev/common/autoconf/help.m4:    printf "* ccache status: 
>> $CCACHE_STATUS\n"
>> > jdk8u-dev/common/autoconf/help.m4:    printf "$FOUND_ALT_VARIABLES\n"
>> > jdk8u-dev/jdk/test/java/lang/ProcessBuilder/InheritIO/InheritIO.sh: 
>>      'InheritIO$'${TEST_NAME} printf message > stdout.txt 2> stderr.txt
>> > jdk8u-dev/jdk/test/java/lang/Thread/UncaughtExceptions.sh: printf 
>> "$name:\n"; cat "$got"
>>
>> although not all of them are problematic, at least these need to be 
>> fixed:
>> > jdk8u-dev/common/autoconf/generated-configure.sh:    printf "using 
>> configure arguments '$CONFIGURE_COMMAND_LINE'.\n"
>> > jdk8u-dev/common/autoconf/help.m4:    printf "using configure 
>> arguments '$CONFIGURE_COMMAND_LINE'.\n"
>>
>> and for other JDK versions as well. The fixes are trivial [2], [3].
>>
>> Can some committer please at least log a bug in JBS for this?
>>
>> Regards,
>>
>> Michael 



More information about the build-dev mailing list