From 8cb83ad10ba532d68a67d2693a16e59b41cc57b3 Mon Sep 17 00:00:00 2001
From: Ruben Jenster <r.jenster@drachenfels.de>
Date: Fri, 12 Feb 2021 11:42:07 +0100
Subject: [PATCH 1/3] librariesindex: Fix nil pointer. Refs #1176

Let the library index return the latest known version,
if a library without a version is found.

Signed-off-by: Ruben Jenster <r.jenster@drachenfels.de>
---
 arduino/libraries/librariesindex/index.go      | 5 +++++
 arduino/libraries/librariesindex/index_test.go | 4 ++++
 2 files changed, 9 insertions(+)

diff --git a/arduino/libraries/librariesindex/index.go b/arduino/libraries/librariesindex/index.go
index b21506a197e..29e3c44826d 100644
--- a/arduino/libraries/librariesindex/index.go
+++ b/arduino/libraries/librariesindex/index.go
@@ -16,6 +16,7 @@
 package librariesindex
 
 import (
+	"fmt"
 	"sort"
 
 	"github.com/arduino/arduino-cli/arduino/libraries"
@@ -136,6 +137,10 @@ func (idx *Index) FindLibraryUpdate(lib *libraries.Library) *Release {
 	if indexLib == nil {
 		return nil
 	}
+	if lib.Version == nil {
+		fmt.Printf("[WARN] version for library loaded from %s is nil\n", lib.InstallDir)
+		return indexLib.Latest
+	}
 	if indexLib.Latest.Version.GreaterThan(lib.Version) {
 		return indexLib.Latest
 	}
diff --git a/arduino/libraries/librariesindex/index_test.go b/arduino/libraries/librariesindex/index_test.go
index cc6f9928c89..097d7adec51 100644
--- a/arduino/libraries/librariesindex/index_test.go
+++ b/arduino/libraries/librariesindex/index_test.go
@@ -78,6 +78,10 @@ func TestIndexer(t *testing.T) {
 	require.NotNil(t, rtcUpdate)
 	require.Equal(t, "RTCZero@1.6.0", rtcUpdate.String())
 
+	rtcUpdateNoVersion := index.FindLibraryUpdate(&libraries.Library{Name: "RTCZero", Version: nil})
+	require.NotNil(t, rtcUpdateNoVersion)
+	require.Equal(t, "RTCZero@1.6.0", rtcUpdateNoVersion.String())
+
 	rtcNoUpdate := index.FindLibraryUpdate(&libraries.Library{Name: "RTCZero", Version: semver.MustParse("3.0.0")})
 	require.Nil(t, rtcNoUpdate)
 

From c1b6732462c88e8d725d73e9fa3de5eef2d79305 Mon Sep 17 00:00:00 2001
From: Ruben Jenster <r.jenster@drachenfels.de>
Date: Wed, 17 Feb 2021 15:44:07 +0100
Subject: [PATCH 2/3] Remove logging statement from FindLibraryUpdate.

Signed-off-by: Ruben Jenster <r.jenster@drachenfels.de>
---
 arduino/libraries/librariesindex/index.go | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arduino/libraries/librariesindex/index.go b/arduino/libraries/librariesindex/index.go
index 29e3c44826d..d3b0d5088fa 100644
--- a/arduino/libraries/librariesindex/index.go
+++ b/arduino/libraries/librariesindex/index.go
@@ -16,7 +16,6 @@
 package librariesindex
 
 import (
-	"fmt"
 	"sort"
 
 	"github.com/arduino/arduino-cli/arduino/libraries"
@@ -138,7 +137,6 @@ func (idx *Index) FindLibraryUpdate(lib *libraries.Library) *Release {
 		return nil
 	}
 	if lib.Version == nil {
-		fmt.Printf("[WARN] version for library loaded from %s is nil\n", lib.InstallDir)
 		return indexLib.Latest
 	}
 	if indexLib.Latest.Version.GreaterThan(lib.Version) {

From 0976e8eeceb0c414ea07235f9a043e13424291ad Mon Sep 17 00:00:00 2001
From: Ruben Jenster <r.jenster@drachenfels.de>
Date: Wed, 17 Feb 2021 16:06:23 +0100
Subject: [PATCH 3/3] Add a small comment to the lib.Version nil check.

Signed-off-by: Ruben Jenster <r.jenster@drachenfels.de>
---
 arduino/libraries/librariesindex/index.go | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arduino/libraries/librariesindex/index.go b/arduino/libraries/librariesindex/index.go
index d3b0d5088fa..ea57c69eac3 100644
--- a/arduino/libraries/librariesindex/index.go
+++ b/arduino/libraries/librariesindex/index.go
@@ -136,6 +136,8 @@ func (idx *Index) FindLibraryUpdate(lib *libraries.Library) *Release {
 	if indexLib == nil {
 		return nil
 	}
+	// library.Version is nil when when the version field in
+	// a library descriptor is malformed and could not be parsed.
 	if lib.Version == nil {
 		return indexLib.Latest
 	}