[Kst] [Bug 146502] d2asc segfaults with more than 40 vars, and should also offer to read them from a file
George Staikos
staikos at kde.org
Fri Jun 8 02:30:34 CEST 2007
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=146502
------- Additional Comments From staikos kde org 2007-06-08 02:30 -------
Looks good to me.
On 8-Jun-07, at 3:32 AM, Barth Netterfield wrote:
> Upon review, this should be back-ported to 1.4.1
>
> cbn
>
> On June 7, 2007, Andrew Walker wrote:
>> ------- You are receiving this mail because: -------
>> You are the assignee for the bug, or are watching the assignee.
>>
>> http://bugs.kde.org/show_bug.cgi?id=146502
>> arwalker sumusltd com changed:
>>
>> What |Removed |Added
>> ---------------------------------------------------------------------
>> ------
>> - Status|NEW |RESOLVED
>> Resolution| |FIXED
>>
>>
>>
>> ------- Additional Comments From arwalker sumusltd com 2007-06-07
>> 21:09
>> ------- SVN commit 672647 by arwalker:
>>
>> BUG:146502 Remove arbitrary limits on number of vectors and length of
>> filename to prevent crashes
>>
>> M +30 -26 d2asc.cpp
>>
>>
>> --- branches/work/kst/1.5/kst/src/d2asc/d2asc.cpp #672646:672647
>> @ -15,7 +15,7 @
>> *
>> *
>> *********************************************************************
>> ******
>> /
>>
>> -#include <stdlib.h> // atoi
>> +#include <stdlib.h>
>> #include <kconfig.h>
>> #include <kinstance.h>
>>
>> @ -26,6 +26,11 @
>> #include "kstdataobjectcollection.h"
>> #undef protected
>>
>> +struct fieldEntry {
>> + QString field;
>> + bool doHex;
>> +};
>> +
>> void Usage() {
>> fprintf(stderr, "usage: d2asc filename [-f <first frame>]\n");
>> fprintf(stderr, " [-n <numframes>] [-s skip [-a]]
>> \n");
>> @ -44,28 +49,26 @
>> atexit(exitHelper);
>> KInstance inst("d2asc");
>> KstDataSourcePtr file;
>> - int i;
>>
>> KConfig *kConfigObject = new KConfig("kstdatarc", false, false);
>> KstDataSource::setupOnStartup(kConfigObject);
>>
>> - char field_list[40][120], filename[180];
>> - bool do_hex[40];
>> - int n_field=0;
>> + fieldEntry field;
>> + QValueList<fieldEntry> fieldList;
>> + char *filename;
>> + bool do_ave = false, do_skip = false;
>> int start_frame=0, n_frames=2000000;
>> - bool do_ave = false, do_skip = false;
>> int n_skip = 0;
>> int NS=0, i_S;
>> + int i;
>>
>> if (argc < 3 || argv[1][0] == '-') {
>> Usage();
>> return -1;
>> }
>>
>> - for (i = 0; i < 40; i++)
>> - do_hex[i] = false;
>> + filename = argv[1];
>>
>> - strcpy(filename, argv[1]);
>> for (i = 2; i < argc; i++) {
>> if (argv[i][0] == '-') {
>> if (argv[i][1] == 'f') {
>> @ -82,19 +85,22 @
>> do_ave = true;
>> } else if (argv[i][1] == 'x') {
>> i++;
>> - strcpy(field_list[n_field], argv[i]);
>> - do_hex[n_field] = true;
>> - n_field++;
>> + field.field = argv[i];
>> + field.doHex = true;
>> + fieldList.append(field);
>> } else {
>> Usage();
>> }
>> } else {
>> - strcpy(field_list[n_field], argv[i]);
>> - n_field++;
>> + field.field = argv[i];
>> + field.doHex = false;
>> + fieldList.append(field);
>> }
>> }
>>
>> - if (!do_skip) do_ave = false;
>> + if (!do_skip) {
>> + do_ave = false;
>> + }
>>
>> file = KstDataSource::loadSource(filename);
>> if (!file || !file->isValid() || file->isEmpty()) {
>> @ -104,30 +110,28 @
>> /** make vectors and fill the list **/
>> QPtrList<KstRVector> vlist;
>>
>> - for (i=0; i<n_field; i++) {
>> -
>> - if (!file->isValidField(field_list[i])) {
>> + for (i=0; i<int(fieldList.size()); i++) {
>> + if (!file->isValidField(fieldList[i].field)) {
>> fprintf(stderr, "d2asc error: field %s in file %s is not
>> valid\n",
>> - field_list[i], filename);
>> + fieldList[i].field.latin1(), filename);
>> return -3;
>> }
>> - KstRVectorPtr v = new KstRVector(file, field_list[i],
>> KstObjectTag("tag", KstObjectTag::globalTagContext), start_frame,
>> n_frames,
>> n_skip, n_skip>0, do_ave); + KstRVectorPtr v = new KstRVector
>> (file,
>> fieldList[i].field, KstObjectTag("tag",
>> KstObjectTag::globalTagContext),
>> start_frame, n_frames, n_skip, n_skip>0, do_ave); vlist.append(v);
>> }
>>
>> /* find NS */
>> - for (i = 0; i < n_field; i++) {
>> -
>> + for (i = 0; i < int(fieldList.size()); i++) {
>> while (vlist.at(i)->update(-1) != KstObject::NO_CHANGE)
>> ; // read vector
>> -
>> - if (vlist.at(i)->length() > NS)
>> + if (vlist.at(i)->length() > NS) {
>> NS = vlist.at(i)->length();
>> + }
>> }
>>
>> for (i_S = 0; i_S < NS; i_S++) {
>> - for (i = 0; i < n_field; i++) {
>> - if (do_hex[i]) {
>> + for (i = 0; i < int(fieldList.size()); i++) {
>> + if (fieldList[i].doHex) {
>> printf("%4x ", (int)vlist.at(i)->interpolate(i_S, NS));
>> } else {
>> printf("%.16g ", vlist.at(i)->interpolate(i_S, NS));
>> _______________________________________________
>> Kst mailing list
>> Kst kde org
>> https://mail.kde.org/mailman/listinfo/kst
>
>
> _______________________________________________
> Kst mailing list
> Kst kde org
> https://mail.kde.org/mailman/listinfo/kst
--
George Staikos
KDE Developer http://www.kde.org/
Staikos Computing Services Inc. http://www.staikos.net/
More information about the Kst
mailing list