Просмотр исходного кода

Merge pull request #32639 from overleaf/fix/figure-modal-zero-byte-file-crash

[web] Fix FileSize crash when uploading zero-byte file in figure modal

GitOrigin-RevId: 6ce0dfa221c44af4df813231c97aac846214b34d
Alexandre Bourdin 6 месяцев назад
Родитель
Сommit
e4b49b00ec

+ 4 - 4
services/web/frontend/js/features/source-editor/components/figure-modal/file-sources/figure-modal-upload-source.tsx

@@ -331,10 +331,10 @@ const FileSize: FC<{ size: number; className?: string }> = ({
     ['TB', 1e12],
     ['TB', 1e12],
     ['PB', 1e15],
     ['PB', 1e15],
   ]
   ]
-  const labelIndex = Math.min(
-    Math.floor(Math.log10(size) / 3),
-    BYTE_UNITS.length - 1
-  )
+  const labelIndex =
+    size > 0
+      ? Math.min(Math.floor(Math.log10(size) / 3), BYTE_UNITS.length - 1)
+      : 0
 
 
   const [label, bytesPerUnit] = BYTE_UNITS[labelIndex]
   const [label, bytesPerUnit] = BYTE_UNITS[labelIndex]
   const sizeInUnits = Math.round(size / bytesPerUnit)
   const sizeInUnits = Math.round(size / bytesPerUnit)

+ 13 - 0
services/web/test/frontend/features/source-editor/components/codemirror-editor-figure-modal.spec.tsx

@@ -149,6 +149,19 @@ describe('<FigureModal />', function () {
       cy.findByLabelText('File size').should('have.text', '10 B')
       cy.findByLabelText('File size').should('have.text', '10 B')
     })
     })
 
 
+    it('Shows file name and zero size when selecting a zero-byte file', function () {
+      cy.get('@file-input').selectFile(
+        {
+          fileName: 'empty.jpg',
+          contents: Cypress.Buffer.alloc(0),
+          mimeType: 'image/jpg',
+        },
+        { force: true }
+      )
+      cy.findByLabelText('File name').should('have.text', 'empty.jpg')
+      cy.findByLabelText('File size').should('have.text', '0 B')
+    })
+
     it('Uploads file when clicking insert', function () {
     it('Uploads file when clicking insert', function () {
       chooseFileFromComputer()
       chooseFileFromComputer()
       cy.get('@uploadRequest').should('not.have.been.called')
       cy.get('@uploadRequest').should('not.have.been.called')