ASF Bugzilla – Attachment 35689 Details for
Bug 62017
Writing more than 1024 OLE objects in a single spreadsheet creates probably an invalid file
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
This version of the programs writes 3072 OLE objects across 3 different sheets - the problem does not occur
ApachePoiMultipleOleObjectsBug.java (text/x-csrc), 34.39 KB, created by
Ravi Wallau
on 2018-01-19 18:58:58 UTC
(
hide
)
Description:
This version of the programs writes 3072 OLE objects across 3 different sheets - the problem does not occur
Filename:
MIME Type:
Creator:
Ravi Wallau
Created:
2018-01-19 18:58:58 UTC
Size:
34.39 KB
patch
obsolete
>// >// Copyright 2018 Emerald Associates, Inc. All Rights Reserved. >// >// Use of this file other than by Emerald Associates, Inc. is forbidden >// unless otherwise authorized by a separate written license agreement. >// >// $Id$ >// >package com.emerald_associates.spreadsheetimpexp.sketch_board; > >import com.google.common.collect.Maps; > >import org.apache.poi.openxml4j.exceptions.InvalidFormatException; >import org.apache.poi.openxml4j.opc.PackagePart; >import org.apache.poi.ss.usermodel.Cell; >import org.apache.poi.ss.usermodel.ClientAnchor; >import org.apache.poi.ss.usermodel.Drawing; >import org.apache.poi.ss.usermodel.Row; >import org.apache.poi.ss.usermodel.Sheet; >import org.apache.poi.ss.usermodel.Workbook; >import org.apache.poi.ss.usermodel.WorkbookFactory; >import org.apache.poi.xssf.streaming.SXSSFSheet; >import org.apache.poi.xssf.streaming.SXSSFWorkbook; >import org.apache.poi.xssf.usermodel.XSSFDrawing; >import org.apache.poi.xssf.usermodel.XSSFObjectData; >import org.apache.poi.xssf.usermodel.XSSFWorkbook; > >import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDvAspect; > >import org.slf4j.Logger; >import org.slf4j.LoggerFactory; > >import java.io.BufferedReader; >import java.io.File; >import java.io.FileOutputStream; >import java.io.IOException; >import java.io.InputStreamReader; >import java.io.OutputStream; >import java.nio.charset.Charset; >import java.util.Arrays; >import java.util.Map; >import java.util.concurrent.atomic.AtomicInteger; > >/** > * @author <a href="mailto:raviw@emerald-associates.com">Ravi Wallau</a> > */ >public class ApachePoiMultipleOleObjectsBug >{ > /** > * Logger. > */ > private static final Logger logger = LoggerFactory.getLogger( ApachePoiMultipleOleObjectsBug.class ); > > static > { > logger.trace( "classload: {}", ApachePoiMultipleOleObjectsBug.class.getName() ); > } > > //J- > private static final byte[] file = new byte[]{-119, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 2, 0, 8, 3, 0, 0, 0, -61, -90, 36, -56, 0, 0, 0, 3, 115, 66, 73, 84, 8, 8, 8, -37, -31, 79, -32, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 13, -41, 0, 0, 13, -41, 1, 66, 40, -101, 120, 0, 0, 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, 103, -101, -18, 60, 26, 0, 0, 2, -51, 80, 76, 84, 69, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -127, -41, -124, 42, 0, 0, 0, -18, 116, 82, 78, 83, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 39, 40, 41, 42, 43, 44, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 79, 80, 81, 82, 83, 84, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 126, 127, -128, -127, -126, -125, -123, -122, -121, -120, -119, -118, -117, -116, -115, -114, -113, -112, -111, -110, -109, -108, -107, -106, -105, -104, -103, -102, -101, -100, -99, -98, -97, -96, -95, -94, -93, -92, -91, -90, -89, -88, -86, -85, -84, -83, -82, -81, -80, -79, -78, -77, -76, -75, -74, -73, -72, -70, -69, -67, -66, -65, -64, -63, -62, -61, -60, -59, -58, -56, -54, -53, -52, -51, -50, -49, -48, -47, -46, -45, -44, -43, -42, -41, -40, -38, -36, -35, -34, -33, -32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21, -20, -19, -18, -17, -16, -15, -14, -13, -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -7, 17, -73, 56, 0, 0, 15, 2, 73, 68, 65, 84, 120, -38, -19, -99, -7, -97, 86, 85, 29, -128, -49, 12, -85, 10, -78, -88, -119, -71, 51, -93, -94, 97, 80, 106, 2, 82, 110, 1, -18, 75, -117, -112, -128, -50, 96, 90, 52, 2, 14, -94, 24, -82, 65, 105, 41, -102, 36, -103, -94, 105, -91, 9, -94, -103, -119, 107, -46, -120, 91, -118, 10, 46, 8, 33, 46, -88, 12, 2, 19, 115, -1, -122, 126, 49, 21, 121, -17, 125, -17, 114, -18, 123, -50, -9, 124, -97, -25, -25, 57, -9, -61, 61, -49, -13, -31, 59, -13, -66, -25, -67, -81, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 38, -35, -122, 52, -51, 123, 100, 9, 56, 97, -31, -52, -47, -69, -69, -43, 95, -33, -46, 30, -127, 83, 30, 29, -24, -48, -1, -2, -113, 33, -64, 57, -19, -25, -41, -71, -14, 63, 120, 3, -37, -17, 3, 11, 28, -7, -17, -2, 28, 123, -17, 7, 103, -72, 9, 96, 22, 59, -17, 9, -17, -38, -7, 85, -80, 126, -9, -63, -93, 38, 76, -97, 116, -46, 97, 123, 119, 75, -13, -29, -115, 29, -20, -68, 47, -36, 90, 88, 126, -35, -48, -53, -98, -7, 92, 104, -25, -54, -21, -113, -21, 81, 109, -55, 68, -10, -35, 27, -34, 44, -88, -1, -104, -101, 87, 111, 119, -51, -113, -1, 50, -74, 123, -30, -94, -101, -40, 119, 127, -40, -75, -120, -2, 35, -30, -2, -104, 91, -15, -61, -6, -124, 101, 109, 108, -69, 63, 28, -105, 95, -1, -63, -9, 37, 92, -9, -71, 81, -15, 11, -73, -80, -19, -2, -48, -110, -5, -107, -36, -33, 108, 77, -66, -14, -61, 3, -30, -106, -78, -21, 30, -47, -102, -45, -1, 110, -43, 95, -54, 123, 107, 8, 1, 4, 27, -64, -41, 86, -90, -72, -10, -58, 51, 8, 32, -48, 0, 78, -6, 56, -35, -43, 103, -43, 17, 64, -120, 1, -116, -17, 76, 123, -7, -7, -11, 4, 16, 94, 0, -23, -3, 87, 46, -128, 93, -105, 29, 64, 22, -1, 21, 11, 96, -41, 69, 7, -112, -51, 127, -91, 2, -40, 117, -55, 1, 100, -11, 95, -95, 0, 118, 93, 112, 0, -39, -3, 111, 95, 64, -91, -97, 89, 122, 23, -108, -50, -106, -30, 1, -28, -15, -65, 93, 1, -107, 126, -92, -103, 83, -78, -27, -77, -66, 112, 0, -7, -4, 127, -71, 0, 2, -112, 26, -64, -124, -50, -68, -109, 102, -101, 2, 8, 64, 104, 0, -7, -3, 111, 91, 0, 1, -56, 12, -96, -120, -1, 109, 10, 32, 0, -111, 1, 84, -13, 95, -19, -92, -9, -115, 4, 32, 58, -128, 68, -1, -19, 87, -98, -72, -113, -39, -27, 59, 83, 94, 79, 42, -32, 2, 2, 16, 28, 64, -94, -1, -57, 27, 62, -3, -87, -34, -13, 18, 126, -86, -29, 104, 2, 16, 27, 64, -94, -1, 75, -65, -16, 11, -34, -104, -124, -113, -4, -67, -33, 64, 0, 66, 3, -104, -40, -103, -6, -59, -60, -111, 9, 5, -68, -36, -101, 0, 68, 6, -112, -63, 127, 114, 1, 87, 16, -128, -60, 0, 50, -7, 55, -26, -88, -8, 2, -38, -9, 32, 0, 121, 1, 100, -12, 111, -52, 81, 27, -110, -1, 22, 36, 0, 81, 1, 100, -10, 111, -52, -120, -40, 2, 58, 26, 9, 64, 88, 0, 57, -4, 39, 21, 112, 23, 1, -56, 10, 32, -105, 127, 99, -122, -57, 21, -80, -71, 55, 1, 72, 10, 32, -89, -1, -124, 2, 78, 39, 0, 65, 1, -100, -109, -41, -65, 49, -61, 98, 62, 58, 112, 27, 1, -56, 9, -96, -128, -1, -40, 2, -34, -19, 66, 0, 82, 2, 40, -28, -33, -104, 35, 55, 86, 92, 56, -116, 0, -124, 4, 80, -48, -65, 49, 23, -58, -84, 36, 0, 17, 1, 20, -10, 111, -22, -97, -86, -76, -12, 58, 2, 16, 17, 64, 113, -1, -58, 28, 84, 105, -19, -97, 8, 64, 66, 0, 54, -4, 27, -13, 70, -123, -59, 79, 16, -128, -128, 0, -50, -75, -30, -33, -36, 83, 97, -11, 107, 4, -32, 127, 0, -106, -4, -101, 25, 21, -106, 111, 36, 0, -17, 3, -80, -27, -33, 92, 85, 97, -3, 122, 2, -16, 61, 0, 107, -2, -51, -33, 43, 92, -32, 37, 2, -16, 60, 0, 123, -2, -51, 123, 21, -82, -16, 48, 1, -8, 29, -128, 69, -1, -93, 43, 93, 98, 1, 1, 120, 29, -128, 69, -1, 125, 86, 85, -70, -58, 53, 4, -32, 115, 0, 22, -3, -101, 91, 42, 94, -28, 124, 2, -16, 56, -128, 38, -117, -2, 91, 43, 95, -27, 0, 2, -16, 55, -128, 26, -8, 127, -123, -13, 0, -2, 6, 80, 3, -1, -47, 28, 2, -16, 54, -128, 90, -8, -113, 70, 18, -128, -81, 1, 36, -6, 127, -48, -110, -1, 15, -70, 18, -128, -89, 1, 52, 37, 127, -2, -1, 34, 43, -2, -93, 43, 13, 1, -8, 25, 64, 83, -75, -25, 127, 76, -77, -31, -1, -3, -66, 4, -32, 103, 0, -51, -43, -97, -1, 50, -83, -72, -1, 104, -86, 33, 0, 47, 3, 104, 78, -13, -4, -97, -87, -123, -3, -65, -43, -109, 0, -68, 12, -96, 57, -35, -13, -97, -90, 20, -12, 31, 77, 48, 4, -32, 99, 0, -51, 105, -97, -1, 53, -91, -104, -1, 123, -21, 8, -64, -57, 0, -102, -45, 63, -1, -19, -62, 34, -2, -97, -17, 101, 44, 7, 48, -12, 39, -73, -67, -68, 85, -20, 115, -102, -33, 121, -32, -78, 19, 118, 72, 113, -105, 7, 53, -3, -18, -39, -49, -65, -101, 115, -35, -125, -77, 78, -36, -55, 106, 0, -51, 89, -98, -1, -41, -110, -33, -1, -70, -3, -116, -35, 0, -6, -35, 30, -119, -25, -107, 35, -86, -35, -27, 14, -65, -36, 62, -15, 21, 35, 44, 6, -48, -100, -19, -7, -113, 45, 121, -3, 111, 25, 110, -20, 6, 48, 122, 117, 20, 0, 91, 127, -47, 51, -15, 46, 15, 95, 94, 105, 85, -25, 117, 59, -38, 10, -96, 57, -21, -13, 63, 127, -106, -49, 127, -25, 88, 99, 55, -128, 99, -93, 64, -72, 51, -23, 46, 15, -39, 28, -77, -22, 30, 75, 1, 44, -53, -2, -4, -41, -55, -71, -4, -113, 55, 118, 3, -24, -13, 86, 40, 1, 68, -89, -60, -33, 101, -41, -74, -40, 85, -33, -73, 19, 64, 30, 38, 23, -13, 111, 39, -128, -7, -63, -8, -113, -42, -58, 127, -127, -13, 37, -15, -85, -34, -37, -61, 89, 0, -107, -89, 64, 106, -1, 86, 2, 56, 40, 10, -120, -85, -29, -18, 114, -25, -92, -81, 89, -66, -42, 93, 0, -107, 10, 72, -17, -33, 74, 0, 103, -121, 20, -64, -93, 113, 119, 57, 50, 105, -43, 83, -27, 6, -48, 58, -87, 51, -53, -33, 2, 25, -4, 91, 9, -32, -122, -112, 2, -8, -72, 62, -26, 46, -89, 38, -83, 106, -17, 82, 102, 0, -83, -58, 36, 22, 112, 97, 126, -1, 86, 2, 120, 58, -92, 0, -94, 65, 49, 119, 121, 119, -30, -86, -125, 75, 12, -96, -43, -104, 44, 5, 100, -14, 111, 37, -128, 21, 65, 5, 48, 60, -26, 46, -1, -111, -72, 106, 68, 121, 1, 124, -6, 30, 97, 98, 1, 83, -14, -6, -73, 18, -64, -97, 67, -14, -33, -71, 115, -52, 93, -50, 78, 92, -42, -73, -76, 0, 62, 59, 37, -110, 88, -64, -44, -100, -2, -83, 4, -48, 26, 82, 0, -53, -29, -18, -14, -52, -92, 85, -81, -107, -10, 75, -32, 23, -50, 9, -90, 41, 32, -85, 127, 43, 1, 28, 29, 82, 0, 11, -30, -18, -78, 33, 105, -43, -35, 101, 5, -80, -51, -7, -33, -60, 2, -90, -27, -14, 111, 37, -128, 29, 94, 11, 40, -128, -29, 99, 111, -13, -87, -124, 85, 39, -106, 20, -64, -105, -50, 127, 39, 22, 112, 81, 30, -1, 118, 94, 9, 28, -74, 53, 24, -1, -13, -30, -17, -78, 49, -2, -47, -5, -73, -105, -12, 82, -16, 118, -25, -1, -109, 11, -56, -31, -33, -46, -101, 65, 115, 66, -15, -1, 122, -17, -124, -69, -68, 32, 110, -43, -86, -66, -27, 4, 80, -31, -13, 31, -109, 114, 126, 95, 96, -100, 127, 75, 1, -12, 92, 24, -122, -1, 85, -121, 37, -35, 101, -35, -51, -107, 87, -83, 57, -46, -108, 18, 64, -59, -49, -1, -28, 43, 32, -42, -65, -75, 3, 33, -29, -42, 7, -32, -1, -42, 62, 85, -18, 114, -44, -37, 21, 86, -35, -47, -33, -108, 18, 64, -52, -25, -65, -14, 20, 16, -17, -33, -34, -111, -80, 61, -25, -67, 36, -5, 55, -127, -75, -117, -57, -92, 56, -8, -12, -85, 101, 29, -37, -84, 90, -9, -32, -55, -10, -114, -124, -91, -15, -97, -89, -128, 4, -1, 86, 15, -123, -10, 26, 113, 78, -77, 84, 78, -39, 39, -11, -72, 59, 124, -62, 103, -85, 78, -35, -41, -22, -95, -48, 84, -2, -77, 23, -112, -28, -97, 83, -63, 62, -99, 10, 78, -25, 63, 107, 1, -119, -2, 9, -64, -49, 0, -86, 124, -2, 59, 75, 1, -55, -2, 9, -64, -53, 0, -86, 126, -2, 63, 125, 1, 85, -4, 19, -128, 35, 38, 21, -14, -97, -66, -128, 106, -2, 9, -64, -111, -1, -62, -49, -1, 72, 87, 64, 85, -1, 4, 32, -44, 127, -70, 2, -86, -5, 39, 0, 23, 52, 91, 121, -2, 79, -11, 2, 82, -8, 39, 0, -79, -2, -85, 23, -112, -58, 63, 1, -56, -11, 95, -83, -128, 84, -2, 9, 64, -80, 127, 99, -2, 90, -40, 63, 1, 72, -10, -33, 90, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -27, -47, 36, -63, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 111, 51, -128, 110, 95, 111, -102, 115, -83, 44, 46, 63, 125, 63, -27, -2, -19, 5, 112, -8, 19, -101, 68, 62, 31, 114, -35, -4, 93, 52, -5, -73, 21, 64, -49, -39, 114, 31, 19, -6, -97, -109, 21, -5, -73, 20, -64, 110, -53, 69, 63, 37, 118, -82, 94, -1, -106, 2, -112, -2, -83, 65, -89, -87, -11, 111, 39, -128, 51, -123, -5, -113, -34, -39, 77, -85, 127, 43, 1, -12, 123, 87, 122, 0, -47, 29, 90, -3, 91, 9, 96, -116, 120, -1, -47, 71, 117, 74, -3, 91, 9, 96, -90, -4, 0, -94, 3, -107, -6, -73, 18, -64, -30, 0, 2, 56, 75, -87, 127, 43, 1, -68, 25, 64, 0, -41, 40, -11, 111, 37, -128, -57, 2, 8, -32, 60, -91, -2, -83, 4, 16, -62, -105, -58, 125, 67, -87, 127, 43, 1, 124, 79, -66, -1, 45, 61, -108, -6, -73, 18, -64, -66, 29, -30, 3, 120, 92, -85, 127, 59, -81, 4, -50, 18, -1, 31, -64, -95, 90, -3, -37, 9, -96, -5, 115, -62, 3, -72, 84, -83, 127, 75, 111, 6, 13, -34, 36, -38, -1, -46, -82, 106, -3, -37, 58, 15, 48, 104, -87, 92, -3, -99, -41, -17, -92, -41, -65, -75, 19, 65, 93, 103, 108, 22, -22, 127, -27, -73, -115, 98, -1, 22, -49, 4, -10, 63, -10, -30, 123, -1, -67, 92, 22, 109, -73, 52, 15, -19, 94, 108, 3, -49, -107, -19, -97, 83, -63, 70, -73, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 72, -57, 57, -95, -6, 39, 0, -27, -2, 9, 64, -71, 127, 2, -16, -56, 127, 52, -57, 16, -128, 102, -1, 89, 47, 70, 0, -127, -7, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, -97, 0, -108, -5, 39, 0, -27, -2, 9, 64, -71, 127, 2, 80, -18, 95, 126, 0, -35, 27, 15, -84, 45, 13, 93, 66, -14, 47, 59, -128, 46, 63, -104, -5, 116, -19, 31, 24, -69, -15, -55, -21, 78, 13, -58, -65, -24, 0, 14, -4, -89, -77, 71, 125, 62, -76, 79, 32, -2, 37, 7, -48, -14, -119, -61, -121, -67, 126, 120, 118, 24, -2, 5, 7, 112, -74, -29, -25, -3, 126, 55, 8, -1, 114, 3, -40, 107, -67, -29, 0, 86, -11, 13, -63, -65, -36, 0, -2, -26, -4, -111, -33, 127, 8, -63, -65, -40, 0, -122, 70, -18, -39, 43, 0, -1, 98, 3, -104, -28, 65, 0, 39, 7, -32, 95, 108, 0, -13, 61, 8, -32, -118, 0, -4, -117, 13, -32, 121, 15, 2, 120, 72, -104, -1, -50, -83, 1, 5, -80, -36, -125, 0, -106, 8, -13, 63, 126, 125, 64, 1, 44, -16, 32, -128, -39, -62, -4, -101, -112, 2, -104, -20, 65, 0, 103, -38, -40, -116, -119, 53, 60, -1, 31, 82, 0, -33, -14, 32, -128, -127, -62, -4, 7, 21, 64, 23, -9, 95, 26, -8, -128, 52, -1, 65, 5, 96, 6, -71, -2, -30, -48, 15, -10, -108, -26, 63, -84, 0, -52, 52, -57, 1, -116, 21, -25, 63, -80, 0, -70, -4, -70, -45, -95, -2, -114, -103, -14, -4, 7, 22, -128, 49, 35, 87, 58, -13, -1, -30, 16, -127, -2, -125, 11, -64, -12, -102, -79, 104, -75, 3, -5, 111, -36, -37, -46, 67, -94, -1, -16, 2, 48, -58, -104, 1, -61, -113, -86, 45, 71, -18, 106, 101, 19, 28, -8, 15, 51, 0, -95, -72, -16, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 51, 38, -8, -15, -3, 47, 4, -96, -37, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 31, 96, 0, -67, -122, -73, -4, -79, -19, -39, 98, 44, -66, 108, -52, 0, 29, -2, -125, 11, -96, 126, -118, -83, -81, -114, 92, -48, 79, -125, -1, -48, 2, 104, 124, -46, -34, -77, 31, 87, -113, 81, -32, 63, -80, 0, 14, 105, -73, -6, -8, -49, -13, -62, -9, 31, 86, 0, 93, -37, -20, 62, -1, -75, -67, 33, 120, -1, 97, 5, 112, 73, 100, -103, 39, -22, 67, -9, 31, 84, 0, 123, 111, -79, 29, 64, 52, 46, 116, -1, 65, 5, 112, -122, 117, -1, -47, -17, -117, -34, -41, 120, -49, -3, 7, 21, -64, 108, -5, 1, -68, 24, -70, -1, -96, 2, 88, 98, 63, -128, -83, 59, 5, -18, 63, -88, 0, -34, -76, 31, 64, 52, 40, 112, -1, 65, 5, -16, -128, 125, -1, -101, -70, 5, -18, 63, -88, 0, 126, 110, 63, -128, -89, 67, -9, 31, 84, 0, 39, -40, 15, -32, -122, -48, -3, 7, 21, 64, -1, 15, -84, 7, 48, 42, 116, -1, 97, -67, 18, 56, -42, -74, -1, 59, -125, -9, 31, -40, -101, 65, -9, -39, -11, -65, -90, 127, -16, -2, 3, 11, 96, -64, 10, -101, -2, 55, 30, 31, -66, -1, -48, -50, 3, -12, -70, -47, -98, -1, 39, 27, 21, -8, 15, -17, 72, -40, -47, 47, -40, -7, -6, -32, 53, 83, -22, 53, -8, 15, -15, 80, 104, -17, -31, -109, -25, -34, 84, -116, 75, -58, 124, 53, -8, -65, -1, -62, 13, -64, 49, -78, -4, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, -54, -3, 19, -128, 114, -1, 4, -96, -36, 63, 1, 40, -9, 79, 0, 86, -8, -111, 88, -1, 4, 96, -125, 17, 29, 98, -3, 19, -128, 5, -66, -78, 86, -82, 127, 2, -80, -64, -43, -126, -3, 19, 64, 113, 118, -2, 80, -80, 127, 2, 40, -50, 56, -55, -2, 9, -96, 56, -117, 37, -5, 39, -128, -62, -12, -35, 44, -39, 63, 1, -108, 55, 1, 68, -8, 39, -128, -46, 38, -128, 12, -1, 4, 80, -42, 4, 16, -30, -97, 0, 74, -102, 0, 82, -4, 19, 64, 81, -18, -105, -19, -97, 0, 74, -103, 0, 115, -60, -8, 39, -128, 82, 38, -64, 64, 49, -2, 9, -96, -116, 9, -48, 38, -57, 63, 1, -108, 49, 1, 90, -27, -8, 39, 0, -41, 19, -64, -79, 127, 2, 112, 60, 1, 92, -5, 39, 0, -73, 19, -64, -71, 127, 2, 112, 58, 1, -36, -5, 39, 0, -105, 19, -64, 3, -1, 4, -32, 112, 2, -8, -32, -97, 0, -36, 77, 0, 47, -4, 19, -128, -11, 9, -16, -116, 40, -1, 4, -32, 106, 2, 120, -30, -97, 0, 10, 48, -74, -64, 4, -16, -59, 63, 1, -72, -103, 0, -34, -8, 39, -128, -4, -12, -87, 56, 1, -90, -53, -14, 79, 0, -74, 39, 64, -125, 44, -1, 4, -32, 96, 2, -8, -28, -97, 0, 106, 63, 1, -68, -14, 79, 0, 53, -97, 0, 126, -7, 39, -128, -36, 44, -54, 55, 1, 60, -13, 79, 0, 53, -98, 0, -66, -7, 39, -128, -38, 78, 0, -17, -4, 19, -128, -43, 9, -80, 76, -100, 127, 2, -88, -35, 4, 24, -40, -38, -26, -97, 127, 2, -88, -47, 4, 72, -74, -17, -50, 63, 1, -44, 98, 2, 84, -77, -17, -48, 63, 1, -40, -100, 0, 23, 87, -74, -1, 76, 20, 121, -21, -97, 0, -54, -99, 0, 13, -45, -85, -37, 119, -22, -97, 0, 74, -100, 0, -23, -20, -69, -11, 79, 0, 101, 77, -128, -76, -10, 29, -5, 39, 0, -117, 19, -96, 49, -121, 125, -41, -2, 9, -64, -2, 4, 104, -104, -66, 44, -118, -92, -8, 39, 0, -53, 19, -96, -15, -30, 44, -10, -35, -5, 39, -128, 60, -100, 21, 51, 1, -78, -38, -9, -64, 63, 1, 88, -101, 0, 111, 103, -74, -17, -125, 127, 2, -80, 54, 1, 114, -32, -127, 127, 2, -80, 54, 1, 100, -6, 39, 0, 91, 19, 64, -88, 127, 2, 112, 54, 1, -4, -16, 79, 0, -82, 38, -64, -122, -45, 12, 1, -56, 12, -64, -54, 4, -8, -41, 33, -122, 0, 100, 6, 96, 97, 2, 108, -66, -1, 24, 111, 110, -121, 0, 106, 61, 1, 54, 47, 30, -41, -41, -93, -37, 33, -128, -84, 44, 12, -56, 62, 1, -44, 116, 2, 108, -66, -33, 55, -5, 4, 80, -69, 9, -32, -91, 125, 2, -88, -47, 4, -16, -43, 62, 1, 100, -90, -9, -90, -112, -20, 19, 64, 102, 70, 4, 101, -97, 0, 50, -13, -45, 108, -10, -57, -6, 109, -97, 0, 50, 51, 55, -117, -3, 62, -58, 127, 8, 32, 27, -105, -89, -76, -65, 72, -124, 125, 2, -56, -52, -113, -125, -78, 79, 0, -103, 25, 22, -108, 125, 2, -56, 76, -35, -85, 33, -39, 39, -128, -20, -52, 8, -55, 62, 1, 100, 103, -57, 23, 98, -20, -97, 37, -48, 62, 1, -28, -32, -128, -113, -62, -79, 79, 0, 121, -8, -26, -53, -37, -38, 95, 40, -41, 62, 1, -28, -94, -57, 85, -1, -3, -1, 63, 113, -109, 108, -5, 4, -112, -109, 67, 103, 46, 90, 19, 125, -78, 108, -127, 116, -5, 4, 80, -128, 93, -22, 77, 8, 16, -128, 114, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, 8, -128, 0, -20, 6, -80, -12, 46, 40, -99, 45, 30, 7, 0, -114, 32, 0, 2, 32, 0, 2, 32, 0, 2, 32, 0, 2, 32, 0, 2, 32, 0, 2, 32, 0, 2, 32, 0, 2, 40, -109, 45, 108, -69, 63, -76, 56, 8, -96, -115, 109, -9, -121, 99, 28, 4, 112, 19, -37, -18, 15, -3, 28, 4, 48, -111, 109, -9, -122, 87, 93, -68, 43, -39, -40, -63, -58, -5, -62, 111, -99, -68, 47, 61, -117, -115, -9, -124, -75, -69, 58, 9, -96, -5, 115, 108, -67, 31, -100, -26, -24, 104, -54, -32, 13, -20, -67, 15, -36, -18, -20, 112, -46, -2, -113, -79, -5, -50, 105, 63, -65, -50, -35, -15, -76, -6, -106, 118, 12, -72, -27, -47, -127, 110, 79, 40, 118, 27, -46, 52, -17, -111, 37, -32, -124, -123, 51, 71, -17, -50, 33, 89, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -128, -48, -8, 31, 29, -50, 87, 95, 120, 2, -112, 103, 0, 0, 0, 0, 73, 69, 78, 68, -82, 66, 96, -126}; > //J+ > > private static int iconId = -1; > > private static final String EXCEL_FILE_LOCATION = "/tmp/excel-test.xlsx"; > > private static final String noteSheetName = "ActivityNote"; > private static final String[] noteContentSheetNames = > new String[]{"ActivityNote Content 1", "ActivityNote Content 2", "ActivityNote Content 3"}; > > // 2500 --- issue happens > // 1500 --- issue happens > // 1050 --- issue happens > // 1025 --- issue happens > // 1024 --- issue happens (there is a template, so it is 1023 + 1) > // 1023 --- issue doesn't happen > > // 1024 is the minimum number for the issue to happen it writes 1024 + 1 notes, so 1025. > private static final int NOTE_COUNT = 1023 ; > > public static void main( final String[] args ) throws Exception > { > testWrite(); > System.out.println( > "Open the file [" + EXCEL_FILE_LOCATION + "] with Excel, " + > "change anything on the first row, and save it, and then close Excel." > ); > System.out.println( "After the file is saved, press Enter to finish the test" ); > final BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) ); > reader.readLine(); > > testRead(); > } > > private static void testWrite() throws Exception > { > System.out.println( "Test write starting" ); > > final SXSSFWorkbook workbook = new SXSSFWorkbook( new XSSFWorkbook() ); > iconId = workbook.addPicture( file, Workbook.PICTURE_TYPE_PNG ); > final SXSSFSheet linkSheet = workbook.createSheet( noteSheetName ); > > System.out.println( "Test write saving Excel file" ); > > for( final String noteContentSheetName : noteContentSheetNames ) { > System.out.println( > "Writing sheet [" + noteContentSheetName + "] " + > "of sheets [" + Arrays.asList( noteContentSheetNames ) + "]" > ); > > final SXSSFSheet contentSheet = workbook.createSheet( noteContentSheetName ); > final SheetRef linkSheetRef = new SheetRef( linkSheet ); > final SheetRef contentSheetRef = new SheetRef( contentSheet ); > > createNoteTemplateEmbeddedObject( workbook, contentSheetRef ); > buildContentSheetHeader( contentSheetRef ); > writeOleObjects( workbook, noteContentSheetName, contentSheetRef ); > } > > try( final OutputStream os = new FileOutputStream( EXCEL_FILE_LOCATION ) ) { > workbook.write( os ); > } > > System.out.println( "\n\n\nTest write finished" ); > } > > private static void testRead() throws IOException, InvalidFormatException > { > System.out.println( "Test read starting" ); > > final File excelTestFile = new File( EXCEL_FILE_LOCATION ); > final Workbook wb = WorkbookFactory.create( excelTestFile ); > > final AtomicInteger shapeCount = new AtomicInteger( 0 ); > final AtomicInteger errorCount = new AtomicInteger( 0 ); > > for( final String noteContentSheetName : noteContentSheetNames ) { > final Sheet noteContentSheet = wb.getSheet( noteContentSheetName ); > final Map<String, PackagePart> shapeNameToEmbeddedObjectsMap = Maps.newHashMap(); > final AtomicInteger rowNo = new AtomicInteger( 0 ); > if( noteContentSheet != null ) { > ( ( XSSFDrawing )noteContentSheet.getDrawingPatriarch() ).getShapes().forEach( > shape -> { > try { > if( shape instanceof XSSFObjectData ) { > shapeNameToEmbeddedObjectsMap.put( > shape.getShapeName(), > ( ( XSSFObjectData )shape ).getObjectPart() > ); > shapeCount.incrementAndGet(); > System.out.print( "#" ); > } > } catch( final Exception ex ) { > errorCount.incrementAndGet(); > System.err.println( > "Failed to add a shape to the collection, row no [" + rowNo + "], " + > "shape will be ignored [" + ex + "]" > ); > ex.printStackTrace( System.err ); > } finally { > rowNo.incrementAndGet(); > System.out.print( "." ); > if( rowNo.get() % 100 == 0 ) { > System.out.println( "\nRow: " + String.valueOf( rowNo.get() ) + "\n" ); > } > if( shapeCount.get() % 100 == 0 ) { > System.out.println( "\nShape: " + String.valueOf( shapeCount.get() ) + "\n" ); > } > } > } > ); > } > } > > if( errorCount.get() > 0 ) { > System.out.println( > "\n\n\nTest read finished with ERRORS, element count: [" + NOTE_COUNT + "], shape count: " + shapeCount.get() > ); > } else { > System.out.println( > "\n\n\nTest read finished SUCCESSFULLY, element count: [" + NOTE_COUNT + "], shape count: " + shapeCount.get() > ); > } > } > > private static void buildContentSheetHeader( final SheetRef contentSheetRef ) > { > final Row headerRow = contentSheetRef.newRow(); > final Cell internalKeyCell = headerRow.createCell( 0 ); > internalKeyCell.setCellValue( "INTERNAL_KEY" ); > final Cell notebookEmbeddedObjectIndex = headerRow.createCell( 1 ); > notebookEmbeddedObjectIndex.setCellValue( "EMBEDDED_OBJECT_INDEX" ); > final Cell notebookEmbeddedObject = headerRow.createCell( 2 ); > notebookEmbeddedObject.setCellValue( "EMBEDDED_OBJECT" ); > } > > private static void writeOleObjects( > final SXSSFWorkbook workbook, > final String noteContentSheetName, > final SheetRef contentSheet > ) throws Exception > { > final Map<Integer, NoteInternalReference> notebookInternalReferences = Maps.newLinkedHashMap(); > for( int noteNo = 0; noteNo < NOTE_COUNT; noteNo++ ) { > final String noteIndexCellAddressInsideOfEmbeddedObjectSheet = > writeNoteContentToEmbeddedObjectSheet( workbook, contentSheet, String.valueOf( noteNo ), getContent( noteNo ) ); > notebookInternalReferences.put( > noteNo, > new NoteInternalReference( > NoteInternalReference.NotebookReferenceType.DOCUMENT_ADDRESS, > buildFullNoteEmbeddedObjectIndexCellAddress( > noteContentSheetName, > noteIndexCellAddressInsideOfEmbeddedObjectSheet > ), > noteNo > ) > ); > System.out.print( "." ); > if( noteNo % 100 == 0 ) { > System.out.println( "\n" + String.valueOf( noteNo ) + "\n" ); > } > } > > System.out.println(); > } > > private static String writeNoteContentToEmbeddedObjectSheet( > final Workbook workbook, > final SheetRef contentSheetRef, > final String noteInternalKey, > final String noteContent > ) throws IOException > { > final Row cells = contentSheetRef.newRow(); > final int newObjectIndex = contentSheetRef.rowCounter.get(); > createNoteEmbeddedObject( workbook, contentSheetRef, noteContent.getBytes( "UTF-8" ), newObjectIndex ); > final Cell internalKeyCell = cells.createCell( 0 ); > internalKeyCell.setCellValue( noteInternalKey ); > > final Cell notebookEmbeddedObjectIndexCell = cells.createCell( 1 ); > notebookEmbeddedObjectIndexCell.setCellValue( newObjectIndex ); > return notebookEmbeddedObjectIndexCell.getAddress().formatAsString(); > } > > private static String buildFullNoteEmbeddedObjectIndexCellAddress( > final String noteContentSheetName, > final String cellAddress > ) > { > // Example: "'Target Sheet'!A1", where 'Target Sheet' is sheet name, A1 - cell number. > return "'" + noteContentSheetName + "'" + "!" + cellAddress; > } > > private static void createNoteEmbeddedObject( > final Workbook workbook, > final SheetRef contentSheetRef, > final byte[] content, > final int index > ) throws IOException > { > createEmbeddedObject( > workbook, > contentSheetRef, > content, > iconId, > noteSheetName + " Notebook " + index, > ".html", > 2, > index > ); > } > > private static void createNoteTemplateEmbeddedObject( final Workbook workbook, final SheetRef contentSheetRef ) > throws IOException > { > createEmbeddedObject( > workbook, > contentSheetRef, > "<html><body></body></html>".getBytes( Charset.forName( "UTF-8" ) ), > iconId, > "LinkSheet Template", > ".html", > 5, > 0 > ); > } > > private static void createEmbeddedObject( > final Workbook workbook, > final SheetRef contentSheetRef, > final byte[] content, > final int iconId, > final String objectName, > final String fileExtension, > final int col, > final int row > ) throws IOException > { > final int oleIdx = > workbook.addOlePackage( content, objectName, objectName + fileExtension, objectName + fileExtension ); > final Drawing<?> pat = contentSheetRef.sheet.createDrawingPatriarch(); > final ClientAnchor anchor = pat.createAnchor( 0, 0, 0, 0, col, row, col + 1, row + 1 ); > anchor.setAnchorType( ClientAnchor.AnchorType.MOVE_DONT_RESIZE ); > > final XSSFObjectData objectData = ( XSSFObjectData )pat.createObjectData( anchor, oleIdx, iconId ); > objectData.getCTShape().getNvSpPr().getCNvPr().setName( objectName ); > objectData.getCTShape().getNvSpPr().getCNvPr().setHidden( false ); > objectData.getOleObject().setDvAspect( STDvAspect.DVASPECT_ICON ); > } > > private static String getContent( final int noteNo ) throws Exception > { > return "<html><head></head><body><p>This is a test html file [" + noteNo + "]</p></body></html>"; > } > > private static class SheetRef > { > private final SXSSFSheet sheet; > private final AtomicInteger rowCounter = new AtomicInteger( -1 ); > > private SheetRef( final SXSSFSheet sheet ) > { > this.sheet = sheet; > } > > private Row newRow() > { > return sheet.createRow( rowCounter.incrementAndGet() ); > } > } > > private static class NoteInternalReference > { > /** > * Logger. > */ > private static final Logger logger = LoggerFactory.getLogger( NoteInternalReference.class ); > > static > { > logger.trace( "classload: {}", NoteInternalReference.class.getName() ); > } > > private final NotebookReferenceType referenceType; > private final String address; > private final Integer noteObjectId; > > public NoteInternalReference( > final NotebookReferenceType referenceType, > final String address, > final Integer noteObjectId > ) > { > this.referenceType = referenceType; > this.address = address; > this.noteObjectId = noteObjectId; > } > > public NotebookReferenceType getReferenceType() > { > return referenceType; > } > > public String getAddress() > { > return address; > } > > public Integer getNoteObjectId() > { > return noteObjectId; > } > > public enum NotebookReferenceType > { > FILE, DOCUMENT_ADDRESS > } > } > > private enum NotebookReferenceType > { > FILE, DOCUMENT_ADDRESS > } >}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 62017
:
35684
| 35689