~ubuntu-branches/ubuntu/trusty/libwpd/trusty

« back to all changes in this revision

Viewing changes to src/lib/WP5DefinitionGroup.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Rene Engelhard
  • Date: 2008-02-12 15:22:12 UTC
  • mfrom: (1.2.1 upstream) (10.1.5 gutsy)
  • Revision ID: james.westby@ubuntu.com-20080212152212-beh3l4ahg9b4o3lj
Tags: 0.8.14-1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 */
24
24
 
25
25
#include "WP5DefinitionGroup.h"
26
 
#include "WPXListener.h"
 
26
#include "WP5Listener.h"
27
27
#include "libwpd_internal.h"
28
28
 
29
 
WP5DefinitionGroup_DefineTablesSubGroup::WP5DefinitionGroup_DefineTablesSubGroup(WPXInputStream *input) :
 
29
WP5DefinitionGroup_DefineTablesSubGroup::WP5DefinitionGroup_DefineTablesSubGroup(WPXInputStream *input, uint16_t subGroupSize) :
30
30
        WP5VariableLengthGroup_SubGroup(),
31
31
        m_position(0),
32
32
        m_numColumns(0),
34
34
        m_leftGutter(0),
35
35
        m_rightGutter(0)
36
36
{
 
37
        long startPosition = input->tell();
37
38
        // Skip useless old values to read the old column number
38
39
        input->seek(2, WPX_SEEK_CUR);
39
40
        m_numColumns = readU16(input);
50
51
        input->seek(10, WPX_SEEK_CUR);
51
52
        m_leftOffset = readU16(input);
52
53
        int i;
 
54
        if ((m_numColumns > 32) || ((input->tell() - startPosition + m_numColumns*5) > (subGroupSize - 4)))
 
55
                throw FileException();
53
56
        for (i=0; i < m_numColumns; i++)
 
57
        {
 
58
                if (input->atEOS())
 
59
                        throw FileException();
54
60
                m_columnWidth[i] = readU16(input);
 
61
        }
55
62
        for (i=0; i < m_numColumns; i++)
 
63
        {
 
64
                if (input->atEOS())
 
65
                        throw FileException();
56
66
                m_attributeBits[i] = readU16(input);
 
67
        }
57
68
        for (i=0; i < m_numColumns; i++)
 
69
        {
 
70
                if (input->atEOS())
 
71
                        throw FileException();
58
72
                m_columnAlignment[i] = readU8(input);
 
73
        }
59
74
}
60
75
 
61
76
void WP5DefinitionGroup_DefineTablesSubGroup::parse(WP5Listener *listener)
64
79
        listener->endTable();
65
80
 
66
81
        listener->defineTable(m_position, m_leftOffset);
67
 
        for (int i=0; i < m_numColumns; i++)
 
82
        for (int i=0; i < m_numColumns && i < 32; i++)
68
83
                listener->addTableColumnDefinition(m_columnWidth[i], m_leftGutter, m_rightGutter, m_attributeBits[i], m_columnAlignment[i]);
69
84
        listener->startTable();
70
85
}
72
87
 
73
88
WP5DefinitionGroup::WP5DefinitionGroup(WPXInputStream *input) : 
74
89
        WP5VariableLengthGroup(),
75
 
        m_subGroupData(NULL)
 
90
        m_subGroupData(0)
76
91
{
77
92
        _read(input);
78
93
}
88
103
        switch(getSubGroup())
89
104
        {
90
105
                case WP5_TOP_DEFINITION_GROUP_DEFINE_TABLES:
91
 
                        m_subGroupData = new WP5DefinitionGroup_DefineTablesSubGroup(input);
 
106
                        m_subGroupData = new WP5DefinitionGroup_DefineTablesSubGroup(input, getSize());
92
107
                        break;
93
108
                default:
94
109
                        break;