~ubuntu-branches/ubuntu/breezy/koffice/breezy-security

« back to all changes in this revision

Viewing changes to kexi/kexidb/roweditbuffer.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2005-10-11 14:49:50 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051011144950-lwpngbifzp8nk0ds
Tags: 1:1.4.1-0ubuntu7
* SECURITY UPDATE: fix heap based buffer overflow in the RTF importer of KWord
* Opening specially crafted RTF files in KWord can cause
  execution of abitrary code.
* Add kubuntu_01_rtfimport_heap_overflow.diff
* References:
  CAN-2005-2971
  CESA-2005-005
  http://www.koffice.org/security/advisory-20051011-1.txt

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of the KDE project
 
2
   Copyright (C) 2003 Jaroslaw Staniek <js@iidea.pl>
 
3
 
 
4
   This library is free software; you can redistribute it and/or
 
5
   modify it under the terms of the GNU Library General Public
 
6
   License as published by the Free Software Foundation; either
 
7
   version 2 of the License, or (at your option) any later version.
 
8
 
 
9
   This library is distributed in the hope that it will be useful,
 
10
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
11
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
12
   Library General Public License for more details.
 
13
 
 
14
   You should have received a copy of the GNU Library General Public License
 
15
   along with this library; see the file COPYING.LIB.  If not, write to
 
16
   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 
17
   Boston, MA 02111-1307, USA.
 
18
*/
 
19
 
 
20
#include <kexidb/roweditbuffer.h>
 
21
 
 
22
#include <kdebug.h>
 
23
 
 
24
using namespace KexiDB;
 
25
 
 
26
 
 
27
RowEditBuffer::RowEditBuffer(bool dbAwareBuffer)
 
28
: m_simpleBuffer(dbAwareBuffer ? 0 : new SimpleMap())
 
29
, m_simpleBufferIt(dbAwareBuffer ? 0 : new SimpleMap::ConstIterator())
 
30
, m_dbBuffer(dbAwareBuffer ? new DBMap() : 0)
 
31
, m_dbBufferIt(dbAwareBuffer ? new DBMap::ConstIterator() : 0)
 
32
{
 
33
}
 
34
 
 
35
RowEditBuffer::~RowEditBuffer()
 
36
{
 
37
        delete m_simpleBuffer;
 
38
        delete m_simpleBufferIt;
 
39
        delete m_dbBuffer;
 
40
        delete m_dbBufferIt;
 
41
}
 
42
 
 
43
const QVariant* RowEditBuffer::at( QueryColumnInfo& fi ) const
 
44
 
45
        if (!m_dbBuffer) {
 
46
                KexiDBWarn << "RowEditBuffer::at(QueryColumnInfo&): not db-aware buffer!" << endl;
 
47
                return 0;
 
48
        }
 
49
        *m_dbBufferIt = m_dbBuffer->find( &fi );
 
50
        if (*m_dbBufferIt==m_dbBuffer->constEnd())
 
51
                return 0;
 
52
        return &(*m_dbBufferIt).data();
 
53
}
 
54
 
 
55
const QVariant* RowEditBuffer::at( Field& f ) const
 
56
{
 
57
        if (!m_simpleBuffer) {
 
58
                KexiDBWarn << "RowEditBuffer::at(Field&): this is db-aware buffer!" << endl;
 
59
                return 0;
 
60
        }
 
61
        *m_simpleBufferIt = m_simpleBuffer->find( f.name() );
 
62
        if (*m_simpleBufferIt==m_simpleBuffer->constEnd())
 
63
                return 0;
 
64
        return &(*m_simpleBufferIt).data();
 
65
}
 
66
 
 
67
const QVariant* RowEditBuffer::at( const QString& fname ) const
 
68
{
 
69
        if (!m_simpleBuffer) {
 
70
                KexiDBWarn << "RowEditBuffer::at(Field&): this is db-aware buffer!" << endl;
 
71
                return 0;
 
72
        }
 
73
        *m_simpleBufferIt = m_simpleBuffer->find( fname );
 
74
        if (*m_simpleBufferIt==m_simpleBuffer->constEnd())
 
75
                return 0;
 
76
        return &(*m_simpleBufferIt).data();
 
77
}
 
78
 
 
79
void RowEditBuffer::clear() {
 
80
        if (m_dbBuffer)
 
81
                m_dbBuffer->clear(); 
 
82
        if (m_simpleBuffer)
 
83
                m_simpleBuffer->clear();
 
84
}
 
85
 
 
86
bool RowEditBuffer::isEmpty() const
 
87
{
 
88
        if (m_dbBuffer)
 
89
                return m_dbBuffer->isEmpty(); 
 
90
        if (m_simpleBuffer)
 
91
                return m_simpleBuffer->isEmpty();
 
92
        return true;
 
93
}
 
94
 
 
95
void RowEditBuffer::debug()
 
96
{
 
97
        if (isDBAware()) {
 
98
                kdDebug() << "RowEditBuffer type=DB-AWARE, " << m_dbBuffer->count() <<" items"<< endl;
 
99
                for (DBMap::ConstIterator it = m_dbBuffer->constBegin(); it!=m_dbBuffer->constEnd(); ++it) {
 
100
                        kdDebug() << "* field name=" <<it.key()->field->name()<<" val="
 
101
                                << (it.data().isNull() ? QString("<NULL>") : it.data().toString()) <<endl;
 
102
                }
 
103
                return;
 
104
        }
 
105
        kdDebug() << "RowEditBuffer type=SIMPLE, " << m_simpleBuffer->count() <<" items"<< endl;
 
106
        for (SimpleMap::ConstIterator it = m_simpleBuffer->constBegin(); it!=m_simpleBuffer->constEnd(); ++it) {
 
107
                kdDebug() << "* field name=" <<it.key()<<" val="
 
108
                        << (it.data().isNull() ? QString("<NULL>") : it.data().toString()) <<endl;
 
109
        }
 
110
}