Details
Description
Steps to reproduce:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:HBox>
<mx:VBox>
<mx:Label text="test"/>
</mx:VBox>
<mx:VBox>
<mx:Text>
<mx:htmlText>
<![CDATA[1
2
3
4
5
6
7
8
9]]
>
</mx:htmlText>
</mx:Text>
</mx:VBox>
</mx:HBox>
</mx:Application>
In order to fail, you must build this with Flash Builder 4.5.1 (I did not test with earlier versions) and check the
"Use Flash Text Engine in MX components" check box in the Flex Compiler options. If this option is not set (i.e., without FTE),
the code above works fine.
There must be two non-empty VBoxes (the order is not important) and the htmlText must display more than 8 lines.
The same can be achieved by programmatically setting the htmlText to contain more than 8 lines, either
with explicit newlines or with <br> tags. The contents of the lines is immaterial. 8 lines or fewer will not cause this bug.
If the other VBox is empty, the bug will not manifest itself.
Actual Results:
This either hangs the browser (sometimes permanently, sometimes for a few minutes), or it throws a null pointer exception with
this stack trace:
at flashx.textLayout.compose::SimpleCompose/finalParcelAdjustment()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\SimpleCompose.as:298]
at flashx.textLayout.compose::BaseCompose/finishParcel()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:2078]
at flashx.textLayout.compose::BaseCompose/parcelHasChanged()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:2247]
at flashx.textLayout.compose::BaseCompose/advanceToNextParcel()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:2220]
at flashx.textLayout.compose::BaseCompose/composeTextFlow()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\BaseCompose.as:467]
at flashx.textLayout.compose::SimpleCompose/composeTextFlow()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\SimpleCompose.as:109]
at TCMFactoryDisplayComposer/http://ns.adobe.com/textLayout/internal/2008::callTheComposer()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\container\TextContainerManager.as:2640]
at flashx.textLayout.compose::StandardFlowComposer/internalCompose()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:760]
at flashx.textLayout.compose::StandardFlowComposer/compose()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\compose\StandardFlowComposer.as:824]
at flashx.textLayout.factory::TextFlowTextLineFactory/createTextLinesInternal()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\factory\TextFlowTextLineFactory.as:140]
at flashx.textLayout.factory::TextFlowTextLineFactory/createTextLines()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\factory\TextFlowTextLineFactory.as:104]
at flashx.textLayout.container::TextContainerManager/compose()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\container\TextContainerManager.as:1306]
at flashx.textLayout.container::TextContainerManager/updateContainer()[C:\Vellum\branches\v2\2.0\dev\output\openSource\textLayout\src\flashx\textLayout\container\TextContainerManager.as:1345]
at HTMLHelper/composeHTMLText()[E:\dev\4.5.1\frameworks\projects\spark\src\mx\core\FTETextField.as:3683]
at mx.core::FTETextField/validateNow()[E:\dev\4.5.1\frameworks\projects\spark\src\mx\core\FTETextField.as:2524]
at mx.core::FTETextField/get textWidth()[E:\dev\4.5.1\frameworks\projects\spark\src\mx\core\FTETextField.as:1651]
at mx.controls::Text/measureUsingWidth()[E:\dev\4.5.1\frameworks\projects\mx\src\mx\controls\Text.as:493]
at mx.controls::Text/measure()[E:\dev\4.5.1\frameworks\projects\mx\src\mx\controls\Text.as:375]
at mx.core::UIComponent/measureSizes()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8496]
at mx.core::UIComponent/validateSize()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\core\UIComponent.as:8420]
at mx.managers::LayoutManager/validateSize()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:665]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:792]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.5.1\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1180]
The last line that I can debug is line 112 of TextFlowTextLineFactory.as which contains:
TextLineFactoryBase.endFactoryCompose(saved);
The variable 'saved' is null at this point.
Expected Results:
A two column display with the string "test" in one column and a vertical sequence of numbers in the other.
Workaround (if any):
Using s:Application, s:VGroup, and s:HGroup instead of their mx equivalents eliminates (or hides) the problem.