apps-android-commons
apps-android-commons copied to clipboard
"NumberFormatException: There are more than one component" at ExifAttribute.getIntValue
For a particular picture, I am getting this crash everytime I send it for upload via "share":
java.lang.NumberFormatException: There are more than one component
at androidx.exifinterface.media.ExifInterface$ExifAttribute.getIntValue(ExifInterface.java:3394)
at androidx.exifinterface.media.ExifInterface.handleThumbnailFromJfif(ExifInterface.java:7125)
at androidx.exifinterface.media.ExifInterface.setThumbnailData(ExifInterface.java:7110)
at androidx.exifinterface.media.ExifInterface.getJpegAttributes(ExifInterface.java:5641)
at androidx.exifinterface.media.ExifInterface.loadAttributes(ExifInterface.java:4586)
at androidx.exifinterface.media.ExifInterface.initForFilename(ExifInterface.java:5289)
at androidx.exifinterface.media.ExifInterface.<init>(ExifInterface.java:3946)
at fr.free.nrw.commons.filepicker.UploadableFile.getDateTimeFromExif(UploadableFile.java:126)
at fr.free.nrw.commons.filepicker.UploadableFile.getFileCreatedDate(UploadableFile.java:83)
at fr.free.nrw.commons.upload.UploadModel.createAndAddUploadItem(UploadModel.java:102)
at fr.free.nrw.commons.upload.UploadModel.preProcessImage(UploadModel.java:91)
at fr.free.nrw.commons.repository.UploadRepository.preProcessImage(UploadRepository.java:192)
at fr.free.nrw.commons.upload.mediaDetails.UploadMediaPresenter.receiveImage(UploadMediaPresenter.java:94)
at fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.init(UploadMediaDetailFragment.java:164)
at fr.free.nrw.commons.upload.mediaDetails.UploadMediaDetailFragment.onViewCreated(UploadMediaDetailFragment.java:151)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:322)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1185)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1354)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1432)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1495)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1816)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
at androidx.fragment.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:262)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1092)
at androidx.viewpager.widget.ViewPager.onMeasure(ViewPager.java:1622)
at android.view.View.measure(View.java:24967)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:24967)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7134)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
at android.view.View.measure(View.java:24967)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7134)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24967)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7134)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at android.view.View.measure(View.java:24967)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7134)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1535)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:825)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:704)
at android.view.View.measure(View.java:24967)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:7134)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:185)
at com.android.internal.policy.DecorView.onMeasure(DecorView.java:992)
at android.view.View.measure(View.java:24967)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3266)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1993)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2295)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1853)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8476)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:696)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7032)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
or this shorter exception trace when I open that picture's folder in custom selector:
java.lang.NumberFormatException: There are more than one component
at androidx.exifinterface.media.ExifInterface$ExifAttribute.getIntValue(ExifInterface.java:3394)
at androidx.exifinterface.media.ExifInterface.handleThumbnailFromJfif(ExifInterface.java:7125)
at androidx.exifinterface.media.ExifInterface.setThumbnailData(ExifInterface.java:7110)
at androidx.exifinterface.media.ExifInterface.getJpegAttributes(ExifInterface.java:5641)
at androidx.exifinterface.media.ExifInterface.loadAttributes(ExifInterface.java:4586)
at androidx.exifinterface.media.ExifInterface.initForFilename(ExifInterface.java:5289)
at androidx.exifinterface.media.ExifInterface.<init>(ExifInterface.java:3931)
at fr.free.nrw.commons.customselector.ui.selector.ImageLoader$generateModifiedSHA1$2.invokeSuspend(ImageLoader.kt:238)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
Below is the picture, it might have been modified during the upload so you might not be able to reproduce the crash. Even if you are not able to reproduce the crash, you can try to catch/prevent it and I can test for you.

@nicolas-raoul is this on master?
It has been happening on master since I first tried this picture (like 6 months ago). Probably not high priority since only very few pictures have such erroneous EXIF, I guess.