Skip to content

Commit c43a42b

Browse files
committed
Fix NPE for 'board install' command
The NPI is triggered if Platform.Resource is nil (this may happen for platforms installed manually in the sketchbook/hardware directory for example). Related to arduino#759
1 parent 48383da commit c43a42b

File tree

2 files changed

+31
-20
lines changed

2 files changed

+31
-20
lines changed

Diff for: cli/board/details.go

+21-13
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,16 @@ func (dr detailsResult) String() string {
102102
// ATmega328P (Old Bootloader) cpu=atmega328old
103103
// ATmega168 cpu=atmega168
104104
t := table.New()
105+
addIfNotEmpty := func(label, content string) {
106+
if content != "" {
107+
t.AddRow(label, content)
108+
}
109+
}
110+
105111
t.SetColumnWidthMode(1, table.Average)
106112
t.AddRow(tr("Board name:"), details.Name)
107113
t.AddRow("FQBN:", details.Fqbn)
108-
t.AddRow(tr("Board version:"), details.Version)
114+
addIfNotEmpty(tr("Board version:"), details.Version)
109115

110116
if details.Official {
111117
t.AddRow() // get some space from above
@@ -123,20 +129,22 @@ func (dr detailsResult) String() string {
123129
}
124130

125131
t.AddRow() // get some space from above
126-
t.AddRow(tr("Package name:"), details.Package.Name)
127-
t.AddRow(tr("Package maintainer:"), details.Package.Maintainer)
128-
t.AddRow(tr("Package URL:"), details.Package.Url)
129-
t.AddRow(tr("Package website:"), details.Package.WebsiteURL)
130-
t.AddRow(tr("Package online help:"), details.Package.Help.Online)
132+
addIfNotEmpty(tr("Package name:"), details.Package.Name)
133+
addIfNotEmpty(tr("Package maintainer:"), details.Package.Maintainer)
134+
addIfNotEmpty(tr("Package URL:"), details.Package.Url)
135+
addIfNotEmpty(tr("Package website:"), details.Package.WebsiteURL)
136+
addIfNotEmpty(tr("Package online help:"), details.Package.Help.Online)
131137

132138
t.AddRow() // get some space from above
133-
t.AddRow(tr("Platform name:"), details.Platform.Name)
134-
t.AddRow(tr("Platform category:"), details.Platform.Category)
135-
t.AddRow(tr("Platform architecture:"), details.Platform.Architecture)
136-
t.AddRow(tr("Platform URL:"), details.Platform.Url)
137-
t.AddRow(tr("Platform file name:"), details.Platform.ArchiveFileName)
138-
t.AddRow(tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size))
139-
t.AddRow(tr("Platform checksum:"), details.Platform.Checksum)
139+
addIfNotEmpty(tr("Platform name:"), details.Platform.Name)
140+
addIfNotEmpty(tr("Platform category:"), details.Platform.Category)
141+
addIfNotEmpty(tr("Platform architecture:"), details.Platform.Architecture)
142+
addIfNotEmpty(tr("Platform URL:"), details.Platform.Url)
143+
addIfNotEmpty(tr("Platform file name:"), details.Platform.ArchiveFileName)
144+
if details.Platform.Size != 0 {
145+
addIfNotEmpty(tr("Platform size (bytes):"), fmt.Sprint(details.Platform.Size))
146+
}
147+
addIfNotEmpty(tr("Platform checksum:"), details.Platform.Checksum)
140148

141149
t.AddRow() // get some space from above
142150
for _, tool := range details.ToolsDependencies {

Diff for: commands/board/details.go

+10-7
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,16 @@ func Details(ctx context.Context, req *rpc.BoardDetailsReq) (*rpc.BoardDetailsRe
6060
}
6161

6262
details.Platform = &rpc.BoardPlatform{
63-
Architecture: boardPlatform.Platform.Architecture,
64-
Category: boardPlatform.Platform.Category,
65-
Url: boardPlatform.Resource.URL,
66-
ArchiveFileName: boardPlatform.Resource.ArchiveFileName,
67-
Checksum: boardPlatform.Resource.Checksum,
68-
Size: boardPlatform.Resource.Size,
69-
Name: boardPlatform.Platform.Name,
63+
Architecture: boardPlatform.Platform.Architecture,
64+
Category: boardPlatform.Platform.Category,
65+
Name: boardPlatform.Platform.Name,
66+
}
67+
68+
if boardPlatform.Resource != nil {
69+
details.Platform.Url = boardPlatform.Resource.URL
70+
details.Platform.ArchiveFileName = boardPlatform.Resource.ArchiveFileName
71+
details.Platform.Checksum = boardPlatform.Resource.Checksum
72+
details.Platform.Size = boardPlatform.Resource.Size
7073
}
7174

7275
details.IdentificationPref = []*rpc.IdentificationPref{}

0 commit comments

Comments
 (0)