Complete
over 3 years ago

WERETECH-12116

No fix is planned for the 4.0.x SDK iteration. Potentially planned for 4.1.x SDK series.

With SDK 4.0.7 on Linux, cannot start program on the simulator (escaping problem in monkeybrains's ShellUtils.class)

Tested on Linux, with openjdk 11 and openjdk 18.

Problem exists in 4.0.7 (but 4.0.6 is OK)

monkeybrains.jar incorrectly escape the program filename (looks like double escape of \):

4.0.7 does:

execve("/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell",
["/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell",
"--transport=tcp", "--transport_args=127.0.0.1:1234",
"push",
"\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"",
"0:/GARMIN/APPS/AnalogWatch.prg"], 0x7fffdba06c88 /* 53 vars */ <unfinished ...>

4.0.6 does:

execve("/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell",
["/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell",
"--transport=tcp", "--transport_args=127.0.0.1:1235",
"push",
"\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg\"",
"0:/GARMIN/APPS/AnalogWatch.prg"], 0x7ffc1b736410 /* 54 vars */ <unfinished ...>

The problem is in ShellUtils.class (./com/garmin/connectiq/common/communication/shell/ShellUtils.class)

If I pick ShellUtils.class from 4.0.6 and put in 4.0.7 and re-jar monkeyclass.jar, the problem is solved.

See strace output bellow if more details are needed.

jeansch@blackpage (0) ~/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog % strace -f -s 4096  java -classpath /home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/monkeybrains.jar com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux -f AnalogWatch.prg -d fenix5 -s /home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell 2>&1 | grep AnalogWatch.prg
execve("/usr/bin/java", ["java", "-classpath", "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/monkeybrains.jar", "com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux", "-f", "AnalogWatch.prg", "-d", "fenix5", "-s", "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell"], 0x7ffe7cb68fb0 /* 53 vars */) = 0
[pid 2850466] openat(AT_FDCWD, "AnalogWatch.prg", O_RDONLY) = 8
[pid 2850466] write(15, "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell\0--transport=tcp\0--transport_args=127.0.0.1:1234\0push\0\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"\0000:/GARMIN/APPS/AnalogWatch.prg\0/usr/local/sbin\0/usr/local/bin\0/usr/sbin\0/usr/bin\0/sbin\0/bin\0/snap/bin\0/home/jeansch/.bin\0/home/jeansch/.local/bin\0/home/jeansch/env2/bin\0", 431 <unfinished ...>
[pid 2850489] read(14, "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell\0--transport=tcp\0--transport_args=127.0.0.1:1234\0push\0\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"\0000:/GARMIN/APPS/AnalogWatch.prg\0/usr/local/sbin\0/usr/local/bin\0/usr/sbin\0/usr/bin\0/sbin\0/bin\0/snap/bin\0/home/jeansch/.bin\0/home/jeansch/.local/bin\0/home/jeansch/env2/bin\0", 431) = 431
[pid 2850489] execve("/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell", ["/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/bin/shell", "--transport=tcp", "--transport_args=127.0.0.1:1234", "push", "\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"", "0:/GARMIN/APPS/AnalogWatch.prg"], 0x7fffdba06c88 /* 53 vars */ <unfinished ...>
[pid 2850489] sendto(3, "\1\0\0\0\f\0\0\0\246\0\0\0push \\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\" 0:/GARMIN/APPS/AnalogWatch.prg \0", 166, 0, NULL, 0) = 166
[pid 2850491] recvfrom(3, "\0\0\0\0\0\0\0\0\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0000:/GARMIN/APPS/AnalogWatch.prg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 528, 0, NULL, NULL) = 528
[pid 2850491] openat(AT_FDCWD, "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/\\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\"", O_RDONLY) = -1 ENOENT (No such file or directory)
[pid 2850491] write(1, "Could not open file: \\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\" Error: 1\n", 147) = 147
[pid 2850488] read(10, "Found Transport: tcp\nConnecting...\nConnecting to device...\nDevice Version 0.1.0\nDevice id 1 name \"A garmin device\"\nShell Version 0.1.0\nCould not open file: \\\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.7-2021-11-29-437ff4cc4/samples/Analog/AnalogWatch.prg\\\" Error: 1\nConnection Finished\nClosing shell and port \n", 326) = 326

In 4.0.6, it is ok:

jeansch@blackpage (0) ~/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog % strace -f -s 4096 java -classpath /home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/monkeybrains.jar com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux -f AnalogWatch.prg -d fenix5 -s /home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell 2>&1 | grep AnalogWatch.prg
execve("/usr/bin/java", ["java", "-classpath", "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/monkeybrains.jar", "com.garmin.monkeybrains.monkeydodeux.MonkeyDoDeux", "-f", "AnalogWatch.prg", "-d", "fenix5", "-s", "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell"], 0x7ffe7c7fc370 /* 54 vars */) = 0
[pid 2852250] openat(AT_FDCWD, "AnalogWatch.prg", O_RDONLY <unfinished ...>
[pid 2852277] execve("/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell", ["/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/bin/shell", "--transport=tcp", "--transport_args=127.0.0.1:1235", "push", "\"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg\"", "0:/GARMIN/APPS/AnalogWatch.prg"], 0x7ffc1b736410 /* 54 vars */ <unfinished ...>
[pid 2852277] sendto(3, "\1\0\0\0\f\0\0\0\244\0\0\0push \"/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg\" 0:/GARMIN/APPS/AnalogWatch.prg \0", 164, 0, NULL, 0) = 164
[pid 2852279] recvfrom(3, "\0\0\0\0\0\0\0\0/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0000:/GARMIN/APPS/AnalogWatch.prg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 528, 0, NULL, NULL) = 528
[pid 2852279] openat(AT_FDCWD, "/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg", O_RDONLY) = 4
[pid 2852279] sendto(3, "\6\0\0\0\34\2\0\0\34\2\0\0\0\0\0\0\354e\1\0/home/jeansch/.Garmin/ConnectIQ/Sdks/connectiq-sdk-lin-4.0.6-2021-10-06-af9b9d6e2/samples/Analog/AnalogWatch.prg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0000:/GARMIN/APPS/AnalogWatch.prg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 540, 0, NULL, 0) = 540
Parents
  • Hi Travis, sorry about the disassembling that class, I just wanted to show bug issue as clear as possible (that said, I demonstrate nothing here, especially I do not show how to disassemble).

    Running strace is a pretty common thing.

    By the way, just tested with 4.0.8, and the issue is not fixed.

    Regards,

    Jean

Comment
  • Hi Travis, sorry about the disassembling that class, I just wanted to show bug issue as clear as possible (that said, I demonstrate nothing here, especially I do not show how to disassemble).

    Running strace is a pretty common thing.

    By the way, just tested with 4.0.8, and the issue is not fixed.

    Regards,

    Jean

Children
  • Still not fixed in 4.0.9

  • I Just removed my comment showing some sources.

    It's still sad that a Garmin developer assumed that Linux works like Windows without even testing his change.

    Please remove the  || os.contains("Linux") in ShellUtils and release ;)

    if (os.contains("Windows") || os.contains("Linux")) {
         command.add("\\\"" + source.getAbsolutePath() + "\\\"");
    } else {
         command.add("\"" + source.getAbsolutePath() + "\"");
    }