Bug 318062 NPE in HTMLEmitterUtil
Build Identifier: 20100617-1415 Between org.eclipse.birt.report.engine.emitter.html.HTMLVisionOptimize.buildCellStyle(...) and org.eclipse.birt.report.engine.emitter.html.util.HTMLEmitterUtil.buildOverflowStyle(...), there is improper handling of the 'style' variable. buildOverflowStyle(...) throws a NullPointerException when the 'style' parameter is null. ====== Calling method: /** * Build the style of cell content. */ public void buildCellStyle( ICellContent cell, StringBuffer styleBuffer, boolean isHead, boolean fixedCellHeight ) { IStyle style = getElementStyle( cell ); // implement the cell's clip. if ( fixedReport ) { ================================ HTMLEmitterUtil.buildOverflowStyle( styleBuffer, style, true ); =============================== } IStyle cellMergedStyle = new CellMergedStyle( cell ); ======================== Exception Method: public static void buildOverflowStyle( StringBuffer buf, IStyle style, boolean outputHidden ) { ===============PROBLEM STATEMENT (NO CHECK FOR NULL)========== String overflow = style.getOverflow( ); =========================================== if ( outputHidden || ( overflow != null && !CSSConstants.CSS_OVERFLOW_HIDDEN_VALUE.equals( overflow ) ) ) { buf.append( " overflow:" ); buf.append( overflow != null ? overflow : CSSConstants.CSS_OVERFLOW_HIDDEN_VALUE ); buf.append( ";" ); } } ================= Reproducible: Always Steps to Reproduce: 1. Migrating report from 2.5.2 to 2.6.0 2. Don't know exact reason for NULL value, but code should handle the condition. 3.
engine/org.eclipse.birt.report.engine.emitter.html/src/org/eclipse/birt/report/engine/emitter/html/HTMLPerformanceOptimize.java
AttributeBuilder.buildBox( styleBuffer, style );
		AttributeBuilder.buildBackground( styleBuffer, style, reportEmitter );
		AttributeBuilder.buildText( styleBuffer, style );
		AttributeBuilder.buildVisual( styleBuffer, style );
		AttributeBuilder.buildTextDecoration( styleBuffer, style );
	}
	/**
	 * Build the style of column
	 */
	public void buildColumnStyle( IColumn column, StringBuffer styleBuffer )
	{
		buildSize( styleBuffer, HTMLTags.ATTR_WIDTH, column.getWidth( ) );
		
		
		IStyle style = column.getStyle( );
		
		// output the none value of the display
		CSSValue display = style.getProperty( IStyle.STYLE_DISPLAY );
		if ( IStyle.NONE_VALUE == display )
		{
			styleBuffer.append( " display: none;" );
		}
		
		
		// In performance optimize model the vertical-align can't be setted to
		// the column. Because we output the vertical-align directly here, and
		// it will cause the conflict with the BIRT, CSS, IE, Firefox. The user
		// should set the vertical-align to the row or cells in this model.
		String value = style.getVerticalAlign( );
		if ( null != value )