Skip to content

Commit

Permalink
Fix crash when loading boards (#1354)
Browse files Browse the repository at this point in the history
  • Loading branch information
silvanocerza committed Jul 12, 2021
1 parent df2d30e commit 65b2ea6
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 6 deletions.
9 changes: 3 additions & 6 deletions arduino/cores/packagemanager/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,19 +384,16 @@ func (pm *PackageManager) loadBoards(platform *cores.PlatformRelease) error {
} else {
platform.Menus = properties.NewMap()
}
// This is not a board id so we remove it to correctly
// set all other boards properties
delete(propertiesByBoard, "menu")

if !platform.PluggableDiscoveryAware {
for _, boardProperties := range propertiesByBoard {
convertVidPidIdentificationPropertiesToPluggableDiscovery(boardProperties)
}
}

platform.Menus = propertiesByBoard["menu"]

// This is not a board id so we remove it to correctly
// set all other boards properties
delete(propertiesByBoard, "menu")

skippedBoards := []string{}
for boardID, boardProperties := range propertiesByBoard {
var board *cores.Board
Expand Down
36 changes: 36 additions & 0 deletions test/test_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -712,3 +712,39 @@ def test_core_with_wrong_custom_board_options_is_loaded(run_command, data_dir):
+ "skipping loading of boards arduino-beta-dev:platform_with_wrong_custom_board_options:nessuno: "
+ "malformed custom board options"
) in res.stderr


def test_core_with_missing_custom_board_options_is_loaded(run_command, data_dir):
test_platform_name = "platform_with_missing_custom_board_options"
platform_install_dir = Path(data_dir, "hardware", "arduino-beta-dev", test_platform_name)
platform_install_dir.mkdir(parents=True)

# Install platform in Sketchbook hardware dir
shutil.copytree(
Path(__file__).parent / "testdata" / test_platform_name, platform_install_dir, dirs_exist_ok=True,
)

assert run_command("update")

res = run_command("core list --format json")
assert res.ok

cores = json.loads(res.stdout)
mapped = {core["id"]: core for core in cores}
assert len(mapped) == 1
# Verifies platform is loaded except excluding board with missing options
assert "arduino-beta-dev:platform_with_missing_custom_board_options" in mapped
boards = {b["fqbn"]: b for b in mapped["arduino-beta-dev:platform_with_missing_custom_board_options"]["boards"]}
assert len(boards) == 1
# Verify board with malformed options is not loaded
assert "arduino-beta-dev:platform_with_missing_custom_board_options:nessuno" not in boards
# Verify other board is loaded
assert "arduino-beta-dev:platform_with_missing_custom_board_options:altra" in boards
# Verify warning is shown to user
assert (
"Error initializing instance: "
+ "loading platform release arduino-beta-dev:platform_with_missing_custom_board_options@4.2.0: "
+ "loading boards: "
+ "skipping loading of boards arduino-beta-dev:platform_with_missing_custom_board_options:nessuno: "
+ "malformed custom board options"
) in res.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
nessuno.name=Arduino Nessuno
nessuno.vid.0=0x2341
nessuno.pid.0=0x0043
nessuno.vid.1=0x2341
nessuno.pid.1=0x0001
nessuno.vid.2=0x2A03
nessuno.pid.2=0x0043
nessuno.vid.3=0x2341
nessuno.pid.3=0x0243
nessuno.upload.tool=avrdude
nessuno.upload.protocol=arduino
nessuno.upload.maximum_size=32256
nessuno.upload.maximum_data_size=2048
nessuno.upload.speed=115200
nessuno.bootloader.tool=avrdude
nessuno.bootloader.low_fuses=0xFF
nessuno.bootloader.high_fuses=0xDE
nessuno.bootloader.extended_fuses=0xFD
nessuno.bootloader.unlock_bits=0x3F
nessuno.bootloader.lock_bits=0x0F
nessuno.bootloader.file=optiboot/optiboot_atmega328.hex
nessuno.build.mcu=atmega328p
nessuno.build.f_cpu=16000000L
nessuno.build.board=AVR_NESSUNO
nessuno.build.core=arduino
nessuno.build.variant=standard

nessuno.menu.cache.on=Enabled
nessuno.menu.cache.on.build.cache_flags=-DENABLE_CACHE
nessuno.menu.cache.off=Disabled
nessuno.menu.cache.off.build.cache_flags=

altra.name=Arduino Altra
altra.vid.0=0x2341
altra.pid.0=0x0043
altra.vid.1=0x2341
altra.pid.1=0x0001
altra.vid.2=0x2A03
altra.pid.2=0x0043
altra.vid.3=0x2341
altra.pid.3=0x0243
altra.upload.tool=avrdude
altra.upload.protocol=arduino
altra.upload.maximum_size=32256
altra.upload.maximum_data_size=2048
altra.upload.speed=115200
altra.bootloader.tool=avrdude
altra.bootloader.low_fuses=0xFF
altra.bootloader.high_fuses=0xDE
altra.bootloader.extended_fuses=0xFD
altra.bootloader.unlock_bits=0x3F
altra.bootloader.lock_bits=0x0F
altra.bootloader.file=optiboot/optiboot_atmega328.hex
altra.build.mcu=atmega328p
altra.build.f_cpu=16000000L
altra.build.board=AVR_ALTRA
altra.build.core=arduino
altra.build.variant=standard
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
name=Arduino Test Boards
version=4.2.0

0 comments on commit 65b2ea6

Please sign in to comment.