Skip to content

[Xamarin.Android.Tools.Bytecode] Handle null InnerClassInfo values #144

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
Apr 26, 2017

Conversation

jonpryor
Copy link
Contributor

@jonpryor jonpryor commented Apr 26, 2017

While processing a version of cardview-v7.jar,
class-parse --dump was throwing a NullReferenceException:

$ mkdir cardview-v7
$ cd cardview-v7
$ unzip ../cardview-v7.jar
$ mono …/class-parse.exe -v --dump android/support/v7/widget/CardView.class >/dev/null
class-parse: Unable to read file 'android/support/v7/widget/CardView.class': System.NullReferenceException: Object reference not set to an instance of an object
  at Xamarin.Android.Tools.Bytecode.InnerClassInfo.ToString ()
  ...

The NullReferenceException is because one of the InnerClassInfo
values which InnerClassInfo.ToString() references is null.

After fixing, we see:

Attributes Count: 2
	0: Unknown[SourceFile](2)
	1: InnerClasses(Count=7,
		InnerClass(InnerClass='android/support/v7/widget/CardView$1', OuterClass='', InnerName='', InnerClassAccessFlags=0),
		InnerClass(InnerClass='android/R$attr', OuterClass='android/R', InnerName='attr', InnerClassAccessFlags=Public, Static, Final),
		InnerClass(InnerClass='android/view/View$MeasureSpec', OuterClass='android/view/View', InnerName='MeasureSpec', InnerClassAccessFlags=Public, Static),
		InnerClass(InnerClass='android/support/v7/cardview/R$styleable', OuterClass='android/support/v7/cardview/R', InnerName='styleable', InnerClassAccessFlags=Public, Static, Final),
		InnerClass(InnerClass='android/support/v7/cardview/R$style', OuterClass='android/support/v7/cardview/R', InnerName='style', InnerClassAccessFlags=Public, Static, Final),
		InnerClass(InnerClass='android/support/v7/cardview/R$color', OuterClass='android/support/v7/cardview/R', InnerName='color', InnerClassAccessFlags=Public, Static, Final),
		InnerClass(InnerClass='android/os/Build$VERSION', OuterClass='android/os/Build', InnerName='VERSION', InnerClassAccessFlags=Public, Static))

I'm not sure why CardView$1 has no InnerClassInfo.OuterClass value
-- shouldn't it be android/support/v7/widget/CardView? -- but that
doesn't really matter; class-parse --dump shouldn't fail here.

While processing a version of `cardview-v7.jar`,
`class-parse --dump` was throwing a `NullReferenceException`:

	$ mkdir cardview-v7
	$ cd cardview-v7
	$ unzip ../cardview-v7.jar
	$ mono …/class-parse.exe -v --dump android/support/v7/widget/CardView.class >/dev/null
	class-parse: Unable to read file 'android/support/v7/widget/CardView.class': System.NullReferenceException: Object reference not set to an instance of an object
	  at Xamarin.Android.Tools.Bytecode.InnerClassInfo.ToString ()
	  ...

The `NullReferenceException` is because one of the `InnerClassInfo`
values which `InnerClassInfo.ToString()` references is `null`.

After fixing, we see:

	Attributes Count: 2
		0: Unknown[SourceFile](2)
		1: InnerClasses(Count=7,
			InnerClass(InnerClass='android/support/v7/widget/CardView$1', OuterClass='', InnerName='', InnerClassAccessFlags=0),
			InnerClass(InnerClass='android/R$attr', OuterClass='android/R', InnerName='attr', InnerClassAccessFlags=Public, Static, Final),
			InnerClass(InnerClass='android/view/View$MeasureSpec', OuterClass='android/view/View', InnerName='MeasureSpec', InnerClassAccessFlags=Public, Static),
			InnerClass(InnerClass='android/support/v7/cardview/R$styleable', OuterClass='android/support/v7/cardview/R', InnerName='styleable', InnerClassAccessFlags=Public, Static, Final),
			InnerClass(InnerClass='android/support/v7/cardview/R$style', OuterClass='android/support/v7/cardview/R', InnerName='style', InnerClassAccessFlags=Public, Static, Final),
			InnerClass(InnerClass='android/support/v7/cardview/R$color', OuterClass='android/support/v7/cardview/R', InnerName='color', InnerClassAccessFlags=Public, Static, Final),
			InnerClass(InnerClass='android/os/Build$VERSION', OuterClass='android/os/Build', InnerName='VERSION', InnerClassAccessFlags=Public, Static))

I'm not sure why `CardView$1` has no `InnerClassInfo.OuterClass` value
-- shouldn't it be `android/support/v7/widget/CardView`? -- but that
doesn't really matter; `class-parse --dump` shouldn't fail here.
@jonpryor jonpryor force-pushed the jonp-InnerClassInfo-NRE branch from 23cb59a to 8345576 Compare April 26, 2017 14:56
Copy link
Contributor

@atsushieno atsushieno left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@jonpryor jonpryor merged commit e99f4a5 into dotnet:master Apr 26, 2017
jonpryor added a commit to jonpryor/java.interop that referenced this pull request Dec 16, 2021
Changes: dotnet/android-tools@34e98e2...db125a7

  * dotnet/android-tools@db125a7: [build] Add d17-* as a branch trigger
  * dotnet/android-tools@f2cbc6a: Add resource dlls to MicroBuild signing. (dotnet#145)
  * dotnet/android-tools@35c89dd: Update MaximumCompatibleNDKMajorVersion to be 23 (dotnet#144)
  * dotnet/android-tools@0a22957: [Xamarin.Android.Tools.AndroidSdk] Parse Properties after header (dotnet#143)
  * dotnet/android-tools@dac3a47: [Xamarin.Android.Tools.AndroidSdk] Add API-31 to KnownVersions (dotnet#141)
  * dotnet/android-tools@fc976d8: [Xamarin.Android.Tools.AndroidSdk] Add JdkInfo.GetSupportedJdkInfos() (dotnet#142)
jonpryor added a commit to jonpryor/java.interop that referenced this pull request Mar 14, 2022
Context: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1397171
Context: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1433453

Changes: http://github.com/xamarin/xamarin-android-tools/compare/34e98e2b65917d105169f868b5648f67e68b6784...f4c44e2ac2d91396226f31e8c200464ecc65f648

  * dotnet/android-tools@f4c44e2: [Xamarin.Android.Tools.AndroidSdk] Attributes can be null! (dotnet#158)
  * dotnet/android-tools@f0b3abd: Revert "[Xamarin.Android.Tools.AndroidSdk] Update SDK component for API-32 (dotnet#156)"
  * dotnet/android-tools@bbe85df: [Xamarin.Android.Tools.AndroidSdk] Update SDK component for API-32 (dotnet#156)
  * dotnet/android-tools@a7f4d30: [ci] Mention new NuGet feed and release (dotnet#153)
  * dotnet/android-tools@85ae77f: Merge pull request dotnet#152 from xamarin/dev/mattnorflus/SigningMigration
  * dotnet/android-tools@dd34e54: Adding condition to GetFilesToSign to only include files if build configuration is Release
  * dotnet/android-tools@0e80ea1: Bump LibZipSharp to 2.0.3 (dotnet#151)
  * dotnet/android-tools@d0ab6ac: Fix Typo in commit 0dcf7172 (dotnet#150)
  * dotnet/android-tools@0dcf717: Bump LibZipSharp to 2.0.2 (dotnet#149)
  * dotnet/android-tools@db125a7: [build] Add d17-* as a branch trigger
  * dotnet/android-tools@f2cbc6a: Add resource dlls to MicroBuild signing. (dotnet#145)
  * dotnet/android-tools@35c89dd: Update MaximumCompatibleNDKMajorVersion to be 23 (dotnet#144)
  * dotnet/android-tools@0a22957: [Xamarin.Android.Tools.AndroidSdk] Parse Properties after header (dotnet#143)
  * dotnet/android-tools@dac3a47: [Xamarin.Android.Tools.AndroidSdk] Add API-31 to KnownVersions (dotnet#141)
  * dotnet/android-tools@fc976d8: [Xamarin.Android.Tools.AndroidSdk] Add JdkInfo.GetSupportedJdkInfos() (dotnet#142)
jonpryor added a commit that referenced this pull request Mar 14, 2022
Context: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1397171
Context: https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1433453

Changes: http://github.com/xamarin/xamarin-android-tools/compare/34e98e2b65917d105169f868b5648f67e68b6784...f4c44e2ac2d91396226f31e8c200464ecc65f648

  * dotnet/android-tools@f4c44e2: [Xamarin.Android.Tools.AndroidSdk] Attributes can be null! (#158)
  * dotnet/android-tools@f0b3abd: Revert "[Xamarin.Android.Tools.AndroidSdk] Update SDK component for API-32 (#156)"
  * dotnet/android-tools@bbe85df: [Xamarin.Android.Tools.AndroidSdk] Update SDK component for API-32 (#156)
  * dotnet/android-tools@a7f4d30: [ci] Mention new NuGet feed and release (#153)
  * dotnet/android-tools@85ae77f: Merge pull request #152 from xamarin/dev/mattnorflus/SigningMigration
  * dotnet/android-tools@dd34e54: Adding condition to GetFilesToSign to only include files if build configuration is Release
  * dotnet/android-tools@0e80ea1: Bump LibZipSharp to 2.0.3 (#151)
  * dotnet/android-tools@d0ab6ac: Fix Typo in commit 0dcf7172 (#150)
  * dotnet/android-tools@0dcf717: Bump LibZipSharp to 2.0.2 (#149)
  * dotnet/android-tools@db125a7: [build] Add d17-* as a branch trigger
  * dotnet/android-tools@f2cbc6a: Add resource dlls to MicroBuild signing. (#145)
  * dotnet/android-tools@35c89dd: Update MaximumCompatibleNDKMajorVersion to be 23 (#144)
  * dotnet/android-tools@0a22957: [Xamarin.Android.Tools.AndroidSdk] Parse Properties after header (#143)
  * dotnet/android-tools@dac3a47: [Xamarin.Android.Tools.AndroidSdk] Add API-31 to KnownVersions (#141)
  * dotnet/android-tools@fc976d8: [Xamarin.Android.Tools.AndroidSdk] Add JdkInfo.GetSupportedJdkInfos() (#142)
@github-actions github-actions bot locked and limited conversation to collaborators Apr 15, 2024
# for free to subscribe to this conversation on GitHub. Already have an account? #.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants