| Line | Source Code | Coverage |
|---|
| 1 | /**************************************************************************** | - |
| 2 | ** | - |
| 3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
| 4 | ** Contact: http://www.qt-project.org/legal | - |
| 5 | ** | - |
| 6 | ** This file is part of the QtCore module of the Qt Toolkit. | - |
| 7 | ** | - |
| 8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
| 9 | ** Commercial License Usage | - |
| 10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
| 11 | ** accordance with the commercial license agreement provided with the | - |
| 12 | ** Software or, alternatively, in accordance with the terms contained in | - |
| 13 | ** a written agreement between you and Digia. For licensing terms and | - |
| 14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
| 15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
| 16 | ** | - |
| 17 | ** GNU Lesser General Public License Usage | - |
| 18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
| 19 | ** General Public License version 2.1 as published by the Free Software | - |
| 20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
| 21 | ** packaging of this file. Please review the following information to | - |
| 22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
| 23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
| 24 | ** | - |
| 25 | ** In addition, as a special exception, Digia gives you certain additional | - |
| 26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
| 27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
| 28 | ** | - |
| 29 | ** GNU General Public License Usage | - |
| 30 | ** Alternatively, this file may be used under the terms of the GNU | - |
| 31 | ** General Public License version 3.0 as published by the Free Software | - |
| 32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
| 33 | ** packaging of this file. Please review the following information to | - |
| 34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
| 35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
| 36 | ** | - |
| 37 | ** | - |
| 38 | ** $QT_END_LICENSE$ | - |
| 39 | ** | - |
| 40 | ****************************************************************************/ | - |
| 41 | | - |
| 42 | #include "qelfparser_p.h" | - |
| 43 | | - |
| 44 | #ifndef QT_NO_LIBRARY | - |
| 45 | #if defined (Q_OF_ELF) && defined(Q_CC_GNU) | - |
| 46 | | - |
| 47 | #include "qlibrary_p.h" | - |
| 48 | #include <qdebug.h> | - |
| 49 | | - |
| 50 | QT_BEGIN_NAMESPACE | - |
| 51 | | - |
| 52 | // #define QELFPARSER_DEBUG 1 | - |
| 53 | | - |
| 54 | const char *QElfParser::parseSectionHeader(const char *data, ElfSectionHeader *sh) | - |
| 55 | { | - |
| 56 | sh->name = read<qelfword_t>(data); executed (the execution status of this line is deduced): sh->name = read<qelfword_t>(data); | - |
| 57 | data += sizeof(qelfword_t); // sh_name executed (the execution status of this line is deduced): data += sizeof(qelfword_t); | - |
| 58 | sh->type = read<qelfword_t>(data); executed (the execution status of this line is deduced): sh->type = read<qelfword_t>(data); | - |
| 59 | data += sizeof(qelfword_t) // sh_type executed (the execution status of this line is deduced): data += sizeof(qelfword_t) | - |
| 60 | + sizeof(qelfaddr_t) // sh_flags executed (the execution status of this line is deduced): + sizeof(qelfaddr_t) | - |
| 61 | + sizeof(qelfaddr_t); // sh_addr executed (the execution status of this line is deduced): + sizeof(qelfaddr_t); | - |
| 62 | sh->offset = read<qelfoff_t>(data); executed (the execution status of this line is deduced): sh->offset = read<qelfoff_t>(data); | - |
| 63 | data += sizeof(qelfoff_t); // sh_offset executed (the execution status of this line is deduced): data += sizeof(qelfoff_t); | - |
| 64 | sh->size = read<qelfoff_t>(data); executed (the execution status of this line is deduced): sh->size = read<qelfoff_t>(data); | - |
| 65 | data += sizeof(qelfoff_t); // sh_size executed (the execution status of this line is deduced): data += sizeof(qelfoff_t); | - |
| 66 | return data; executed: return data;Execution Count:3948 | 3948 |
| 67 | } | - |
| 68 | | - |
| 69 | int QElfParser::parse(const char *dataStart, ulong fdlen, const QString &library, QLibraryPrivate *lib, long *pos, ulong *sectionlen) | - |
| 70 | { | - |
| 71 | #if defined(QELFPARSER_DEBUG) | - |
| 72 | qDebug() << "QElfParser::parse " << library; | - |
| 73 | #endif | - |
| 74 | | - |
| 75 | if (fdlen < 64){ evaluated: fdlen < 64| yes Evaluation Count:2 | yes Evaluation Count:484 |
| 2-484 |
| 76 | if (lib) partially evaluated: lib| yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
| 77 | lib->errorString = QLibrary::tr("'%1' is not an ELF object (%2)").arg(library).arg(QLatin1String("file too small")); executed: lib->errorString = QLibrary::tr("'%1' is not an ELF object (%2)").arg(library).arg(QLatin1String("file too small"));Execution Count:2 | 2 |
| 78 | return NotElf; executed: return NotElf;Execution Count:2 | 2 |
| 79 | } | - |
| 80 | const char *data = dataStart; executed (the execution status of this line is deduced): const char *data = dataStart; | - |
| 81 | if (qstrncmp(data, "\177ELF", 4) != 0) { evaluated: qstrncmp(data, "\177ELF", 4) != 0| yes Evaluation Count:253 | yes Evaluation Count:231 |
| 231-253 |
| 82 | if (lib) partially evaluated: lib| yes Evaluation Count:253 | no Evaluation Count:0 |
| 0-253 |
| 83 | lib->errorString = QLibrary::tr("'%1' is not an ELF object").arg(library); executed: lib->errorString = QLibrary::tr("'%1' is not an ELF object").arg(library);Execution Count:253 | 253 |
| 84 | return NotElf; executed: return NotElf;Execution Count:253 | 253 |
| 85 | } | - |
| 86 | // 32 or 64 bit | - |
| 87 | if (data[4] != 1 && data[4] != 2) { partially evaluated: data[4] != 1| yes Evaluation Count:231 | no Evaluation Count:0 |
partially evaluated: data[4] != 2| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 88 | if (lib) | 0 |
| 89 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd cpu architecture")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd cpu architecture")); | 0 |
| 90 | return Corrupt; never executed: return Corrupt; | 0 |
| 91 | } | - |
| 92 | m_bits = (data[4] << 5); executed (the execution status of this line is deduced): m_bits = (data[4] << 5); | - |
| 93 | | - |
| 94 | /* If you remove this check, to read ELF objects of a different arch, please make sure you modify the typedefs | - |
| 95 | to match the _plugin_ architecture. | - |
| 96 | */ | - |
| 97 | if ((sizeof(void*) == 4 && m_bits != 32) || (sizeof(void*) == 8 && m_bits != 64)) { partially evaluated: sizeof(void*) == 4| no Evaluation Count:0 | yes Evaluation Count:231 |
never evaluated: m_bits != 32 partially evaluated: sizeof(void*) == 8| yes Evaluation Count:231 | no Evaluation Count:0 |
partially evaluated: m_bits != 64| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 98 | if (lib) | 0 |
| 99 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("wrong cpu architecture")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("wrong cpu architecture")); | 0 |
| 100 | return Corrupt; never executed: return Corrupt; | 0 |
| 101 | } | - |
| 102 | // endian | - |
| 103 | if (data[5] == 0) { partially evaluated: data[5] == 0| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 104 | if (lib) | 0 |
| 105 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd endianess")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("odd endianess")); | 0 |
| 106 | return Corrupt; never executed: return Corrupt; | 0 |
| 107 | } | - |
| 108 | m_endian = (data[5] == 1 ? ElfLittleEndian : ElfBigEndian); partially evaluated: data[5] == 1| yes Evaluation Count:231 | no Evaluation Count:0 |
| 0-231 |
| 109 | | - |
| 110 | data += 16 // e_ident executed (the execution status of this line is deduced): data += 16 | - |
| 111 | + sizeof(qelfhalf_t) // e_type executed (the execution status of this line is deduced): + sizeof(qelfhalf_t) | - |
| 112 | + sizeof(qelfhalf_t) // e_machine executed (the execution status of this line is deduced): + sizeof(qelfhalf_t) | - |
| 113 | + sizeof(qelfword_t) // e_version executed (the execution status of this line is deduced): + sizeof(qelfword_t) | - |
| 114 | + sizeof(qelfaddr_t) // e_entry executed (the execution status of this line is deduced): + sizeof(qelfaddr_t) | - |
| 115 | + sizeof(qelfoff_t); // e_phoff executed (the execution status of this line is deduced): + sizeof(qelfoff_t); | - |
| 116 | | - |
| 117 | qelfoff_t e_shoff = read<qelfoff_t> (data); executed (the execution status of this line is deduced): qelfoff_t e_shoff = read<qelfoff_t> (data); | - |
| 118 | data += sizeof(qelfoff_t) // e_shoff executed (the execution status of this line is deduced): data += sizeof(qelfoff_t) | - |
| 119 | + sizeof(qelfword_t); // e_flags executed (the execution status of this line is deduced): + sizeof(qelfword_t); | - |
| 120 | | - |
| 121 | qelfhalf_t e_shsize = read<qelfhalf_t> (data); executed (the execution status of this line is deduced): qelfhalf_t e_shsize = read<qelfhalf_t> (data); | - |
| 122 | | - |
| 123 | if (e_shsize > fdlen) { partially evaluated: e_shsize > fdlen| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 124 | if (lib) | 0 |
| 125 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("unexpected e_shsize")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("unexpected e_shsize")); | 0 |
| 126 | return Corrupt; never executed: return Corrupt; | 0 |
| 127 | } | - |
| 128 | | - |
| 129 | data += sizeof(qelfhalf_t) // e_ehsize executed (the execution status of this line is deduced): data += sizeof(qelfhalf_t) | - |
| 130 | + sizeof(qelfhalf_t) // e_phentsize executed (the execution status of this line is deduced): + sizeof(qelfhalf_t) | - |
| 131 | + sizeof(qelfhalf_t); // e_phnum executed (the execution status of this line is deduced): + sizeof(qelfhalf_t); | - |
| 132 | | - |
| 133 | qelfhalf_t e_shentsize = read<qelfhalf_t> (data); executed (the execution status of this line is deduced): qelfhalf_t e_shentsize = read<qelfhalf_t> (data); | - |
| 134 | | - |
| 135 | if (e_shentsize % 4){ partially evaluated: e_shentsize % 4| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 136 | if (lib) | 0 |
| 137 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("unexpected e_shentsize")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library).arg(QLatin1String("unexpected e_shentsize")); | 0 |
| 138 | return Corrupt; never executed: return Corrupt; | 0 |
| 139 | } | - |
| 140 | data += sizeof(qelfhalf_t); // e_shentsize executed (the execution status of this line is deduced): data += sizeof(qelfhalf_t); | - |
| 141 | qelfhalf_t e_shnum = read<qelfhalf_t> (data); executed (the execution status of this line is deduced): qelfhalf_t e_shnum = read<qelfhalf_t> (data); | - |
| 142 | data += sizeof(qelfhalf_t); // e_shnum executed (the execution status of this line is deduced): data += sizeof(qelfhalf_t); | - |
| 143 | qelfhalf_t e_shtrndx = read<qelfhalf_t> (data); executed (the execution status of this line is deduced): qelfhalf_t e_shtrndx = read<qelfhalf_t> (data); | - |
| 144 | data += sizeof(qelfhalf_t); // e_shtrndx executed (the execution status of this line is deduced): data += sizeof(qelfhalf_t); | - |
| 145 | | - |
| 146 | if ((quint32)(e_shnum * e_shentsize) > fdlen) { partially evaluated: (quint32)(e_shnum * e_shentsize) > fdlen| no Evaluation Count:0 | yes Evaluation Count:231 |
| 0-231 |
| 147 | if (lib) | 0 |
| 148 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("announced %2 sections, each %3 bytes, exceed file size")) .arg(e_shnum).arg(e_shentsize); | 0 |
| 149 | .arg(QLatin1String("announced %2 sections, each %3 bytes, exceed file size")) never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("announced %2 sections, each %3 bytes, exceed file size")) .arg(e_shnum).arg(e_shentsize); | 0 |
| 150 | .arg(e_shnum).arg(e_shentsize); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("announced %2 sections, each %3 bytes, exceed file size")) .arg(e_shnum).arg(e_shentsize); | 0 |
| 151 | return Corrupt; never executed: return Corrupt; | 0 |
| 152 | } | - |
| 153 | | - |
| 154 | #if defined(QELFPARSER_DEBUG) | - |
| 155 | qDebug() << e_shnum << "sections starting at " << ("0x" + QByteArray::number(e_shoff, 16)).data() << "each" << e_shentsize << "bytes"; | - |
| 156 | #endif | - |
| 157 | | - |
| 158 | ElfSectionHeader strtab; executed (the execution status of this line is deduced): ElfSectionHeader strtab; | - |
| 159 | qulonglong soff = e_shoff + e_shentsize * (e_shtrndx); executed (the execution status of this line is deduced): qulonglong soff = e_shoff + e_shentsize * (e_shtrndx); | - |
| 160 | | - |
| 161 | if ((soff + e_shentsize) > fdlen || soff % 4 || soff == 0) { partially evaluated: (soff + e_shentsize) > fdlen| no Evaluation Count:0 | yes Evaluation Count:231 |
evaluated: soff % 4| yes Evaluation Count:1 | yes Evaluation Count:230 |
partially evaluated: soff == 0| no Evaluation Count:0 | yes Evaluation Count:230 |
| 0-231 |
| 162 | if (lib) partially evaluated: lib| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 163 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("shstrtab section header seems to be at %1")) .arg(QString::number(soff, 16));Execution Count:1 | 1 |
| 164 | .arg(QLatin1String("shstrtab section header seems to be at %1")) executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("shstrtab section header seems to be at %1")) .arg(QString::number(soff, 16));Execution Count:1 | 1 |
| 165 | .arg(QString::number(soff, 16)); executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("shstrtab section header seems to be at %1")) .arg(QString::number(soff, 16));Execution Count:1 | 1 |
| 166 | return Corrupt; executed: return Corrupt;Execution Count:1 | 1 |
| 167 | } | - |
| 168 | | - |
| 169 | parseSectionHeader(dataStart + soff, &strtab); executed (the execution status of this line is deduced): parseSectionHeader(dataStart + soff, &strtab); | - |
| 170 | m_stringTableFileOffset = strtab.offset; executed (the execution status of this line is deduced): m_stringTableFileOffset = strtab.offset; | - |
| 171 | | - |
| 172 | if ((quint32)(m_stringTableFileOffset + e_shentsize) >= fdlen || m_stringTableFileOffset == 0) { partially evaluated: (quint32)(m_stringTableFileOffset + e_shentsize) >= fdlen| no Evaluation Count:0 | yes Evaluation Count:230 |
partially evaluated: m_stringTableFileOffset == 0| no Evaluation Count:0 | yes Evaluation Count:230 |
| 0-230 |
| 173 | if (lib) | 0 |
| 174 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("string table seems to be at %1")) .arg(QString::number(soff, 16)); | 0 |
| 175 | .arg(QLatin1String("string table seems to be at %1")) never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("string table seems to be at %1")) .arg(QString::number(soff, 16)); | 0 |
| 176 | .arg(QString::number(soff, 16)); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("string table seems to be at %1")) .arg(QString::number(soff, 16)); | 0 |
| 177 | return Corrupt; never executed: return Corrupt; | 0 |
| 178 | } | - |
| 179 | | - |
| 180 | #if defined(QELFPARSER_DEBUG) | - |
| 181 | qDebug(".shstrtab at 0x%s", QByteArray::number(m_stringTableFileOffset, 16).data()); | - |
| 182 | #endif | - |
| 183 | | - |
| 184 | const char *s = dataStart + e_shoff; executed (the execution status of this line is deduced): const char *s = dataStart + e_shoff; | - |
| 185 | for (int i = 0; i < e_shnum; ++i) { evaluated: i < e_shnum| yes Evaluation Count:3718 | yes Evaluation Count:1 |
| 1-3718 |
| 186 | ElfSectionHeader sh; executed (the execution status of this line is deduced): ElfSectionHeader sh; | - |
| 187 | parseSectionHeader(s, &sh); executed (the execution status of this line is deduced): parseSectionHeader(s, &sh); | - |
| 188 | if (sh.name == 0) { evaluated: sh.name == 0| yes Evaluation Count:232 | yes Evaluation Count:3486 |
| 232-3486 |
| 189 | s += e_shentsize; executed (the execution status of this line is deduced): s += e_shentsize; | - |
| 190 | continue; executed: continue;Execution Count:232 | 232 |
| 191 | } | - |
| 192 | const char *shnam = dataStart + m_stringTableFileOffset + sh.name; executed (the execution status of this line is deduced): const char *shnam = dataStart + m_stringTableFileOffset + sh.name; | - |
| 193 | | - |
| 194 | if (m_stringTableFileOffset + sh.name > fdlen) { evaluated: m_stringTableFileOffset + sh.name > fdlen| yes Evaluation Count:1 | yes Evaluation Count:3485 |
| 1-3485 |
| 195 | if (lib) partially evaluated: lib| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 196 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("section name %2 of %3 behind end of file")) .arg(i).arg(e_shnum);Execution Count:1 | 1 |
| 197 | .arg(QLatin1String("section name %2 of %3 behind end of file")) executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("section name %2 of %3 behind end of file")) .arg(i).arg(e_shnum);Execution Count:1 | 1 |
| 198 | .arg(i).arg(e_shnum); executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("section name %2 of %3 behind end of file")) .arg(i).arg(e_shnum);Execution Count:1 | 1 |
| 199 | return Corrupt; executed: return Corrupt;Execution Count:1 | 1 |
| 200 | } | - |
| 201 | | - |
| 202 | #if defined(QELFPARSER_DEBUG) | - |
| 203 | qDebug() << "++++" << i << shnam; | - |
| 204 | #endif | - |
| 205 | | - |
| 206 | if (qstrcmp(shnam, ".qtmetadata") == 0 || qstrcmp(shnam, ".rodata") == 0) { evaluated: qstrcmp(shnam, ".qtmetadata") == 0| yes Evaluation Count:227 | yes Evaluation Count:3258 |
evaluated: qstrcmp(shnam, ".rodata") == 0| yes Evaluation Count:230 | yes Evaluation Count:3028 |
| 227-3258 |
| 207 | if (!(sh.type & 0x1)) { evaluated: !(sh.type & 0x1)| yes Evaluation Count:1 | yes Evaluation Count:456 |
| 1-456 |
| 208 | if (shnam[1] == 'r') { partially evaluated: shnam[1] == 'r'| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 209 | if (lib) partially evaluated: lib| yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-1 |
| 210 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("empty .rodata. not a library."));Execution Count:1 | 1 |
| 211 | .arg(QLatin1String("empty .rodata. not a library.")); executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("empty .rodata. not a library."));Execution Count:1 | 1 |
| 212 | return Corrupt; executed: return Corrupt;Execution Count:1 | 1 |
| 213 | } | - |
| 214 | #if defined(QELFPARSER_DEBUG) | - |
| 215 | qDebug()<<"section is not program data. skipped."; | - |
| 216 | #endif | - |
| 217 | s += e_shentsize; never executed (the execution status of this line is deduced): s += e_shentsize; | - |
| 218 | continue; never executed: continue; | 0 |
| 219 | } | - |
| 220 | | - |
| 221 | if (sh.offset == 0 || (sh.offset + sh.size) > fdlen || sh.size < 1) { partially evaluated: sh.offset == 0| no Evaluation Count:0 | yes Evaluation Count:456 |
partially evaluated: (sh.offset + sh.size) > fdlen| no Evaluation Count:0 | yes Evaluation Count:456 |
partially evaluated: sh.size < 1| no Evaluation Count:0 | yes Evaluation Count:456 |
| 0-456 |
| 222 | if (lib) | 0 |
| 223 | lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("missing section data. This is not a library.")); | 0 |
| 224 | .arg(QLatin1String("missing section data. This is not a library.")); never executed: lib->errorString = QLibrary::tr("'%1' is an invalid ELF object (%2)").arg(library) .arg(QLatin1String("missing section data. This is not a library.")); | 0 |
| 225 | return Corrupt; never executed: return Corrupt; | 0 |
| 226 | } | - |
| 227 | *pos = sh.offset; executed (the execution status of this line is deduced): *pos = sh.offset; | - |
| 228 | *sectionlen = sh.size - 1; executed (the execution status of this line is deduced): *sectionlen = sh.size - 1; | - |
| 229 | if (shnam[1] == 'q') evaluated: shnam[1] == 'q'| yes Evaluation Count:227 | yes Evaluation Count:229 |
| 227-229 |
| 230 | return QtMetaDataSection; executed: return QtMetaDataSection;Execution Count:227 | 227 |
| 231 | } executed: }Execution Count:229 | 229 |
| 232 | s += e_shentsize; executed (the execution status of this line is deduced): s += e_shentsize; | - |
| 233 | } executed: }Execution Count:3257 | 3257 |
| 234 | return NoQtSection; executed: return NoQtSection;Execution Count:1 | 1 |
| 235 | } | - |
| 236 | | - |
| 237 | QT_END_NAMESPACE | - |
| 238 | | - |
| 239 | #endif // defined(Q_OF_ELF) && defined(Q_CC_GNU) | - |
| 240 | #endif // QT_NO_LIBRARY | - |
| 241 | | - |
| | |