apps-android-commons icon indicating copy to clipboard operation
apps-android-commons copied to clipboard

"NumberFormatException: There are more than one component" at ExifAttribute.getIntValue

Open nicolas-raoul opened this issue 3 years ago • 2 comments

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. 2004-07 Afrique (33)

nicolas-raoul avatar Mar 26 '22 13:03 nicolas-raoul

@nicolas-raoul is this on master?

misaochan avatar Mar 26 '22 15:03 misaochan

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.

nicolas-raoul avatar Mar 27 '22 08:03 nicolas-raoul