From: <ai...@us...> - 2010-12-17 03:08:21
|
Revision: 11375 http://plplot.svn.sourceforge.net/plplot/?rev=11375&view=rev Author: airwin Date: 2010-12-17 02:22:50 +0000 (Fri, 17 Dec 2010) Log Message: ----------- Change internal truncation limit for filename length returned by plgfnam from 79 characters to 255 characters. We probably will have to solve this issue with a plgfnam API change instead (see discussion on list), since this alternative means that those who stick to the old limit of 80 will _always_ get a buffer overflow. However, this does appear to work with the examples that have recently been changed to use a 256-character buffer for the filename. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2010-12-17 01:51:49 UTC (rev 11374) +++ trunk/src/plcore.c 2010-12-17 02:22:50 UTC (rev 11375) @@ -3632,15 +3632,15 @@ { if ( fnam == NULL ) { - plabort( "filename string must be preallocated to >=80 bytes" ); + plabort( "filename string must be preallocated to >=256 bytes" ); return; } *fnam = '\0'; if ( plsc->FileName != NULL ) { - strncpy( fnam, plsc->FileName, 79 ); - fnam[79] = '\0'; + strncpy( fnam, plsc->FileName, 255 ); + fnam[255] = '\0'; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2010-12-17 08:55:23
|
Revision: 11377 http://plplot.svn.sourceforge.net/plplot/?rev=11377&view=rev Author: airwin Date: 2010-12-17 08:55:17 +0000 (Fri, 17 Dec 2010) Log Message: ----------- Revert previous commit so that internal truncation limit for filename length returned by plgfnam is changed back 255 characters to 79 characters. The reason for this reversion is some of the bindings (e.g., Tcl) still assume less than 255 characters so there is an automatical buffer overflow unless the limit is changed back to what it was. In any case, there is what I think is a better proposal for dealing with this 80-character total filepath length issue being discussed on list right now. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2010-12-17 07:55:56 UTC (rev 11376) +++ trunk/src/plcore.c 2010-12-17 08:55:17 UTC (rev 11377) @@ -3632,15 +3632,15 @@ { if ( fnam == NULL ) { - plabort( "filename string must be preallocated to >=256 bytes" ); + plabort( "filename string must be preallocated to >=80 bytes" ); return; } *fnam = '\0'; if ( plsc->FileName != NULL ) { - strncpy( fnam, plsc->FileName, 255 ); - fnam[255] = '\0'; + strncpy( fnam, plsc->FileName, 79 ); + fnam[79] = '\0'; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2011-09-05 22:00:22
|
Revision: 11909 http://plplot.svn.sourceforge.net/plplot/?rev=11909&view=rev Author: andrewross Date: 2011-09-05 22:00:16 +0000 (Mon, 05 Sep 2011) Log Message: ----------- Bit of a workaround to prevent qt driver being unloaded. This causes a crash on exit with Qt 4.7.3. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2011-09-03 22:54:45 UTC (rev 11908) +++ trunk/src/plcore.c 2011-09-05 22:00:16 UTC (rev 11909) @@ -3272,6 +3272,10 @@ driver->drvnam, drvspec ); driver->dlhand = lt_dlopenext( drvspec ); + + if (strcmp(driver->drvnam,"qt") == 0) { + lt_dlmakeresident(driver->dlhand); + } } // If it still isn't loaded, then we're doomed. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2011-09-07 09:52:19
|
Revision: 11914 http://plplot.svn.sourceforge.net/plplot/?rev=11914&view=rev Author: andrewross Date: 2011-09-07 09:52:13 +0000 (Wed, 07 Sep 2011) Log Message: ----------- Mark all drivers as resident, not just qt driver, since we have had issues in the past with other drivers (e.g. cairo driver) which would likely have been solved by this patch. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2011-09-06 14:02:29 UTC (rev 11913) +++ trunk/src/plcore.c 2011-09-07 09:52:13 UTC (rev 11914) @@ -3272,10 +3272,11 @@ driver->drvnam, drvspec ); driver->dlhand = lt_dlopenext( drvspec ); - - if (strcmp(driver->drvnam,"qt") == 0) { - lt_dlmakeresident(driver->dlhand); - } + + // Mark all drivers resident to prevent problems + // with atexit handlers / library reinitialisation such + // as those seen with qt and cairo drivers. + lt_dlmakeresident(driver->dlhand); } // If it still isn't loaded, then we're doomed. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <and...@us...> - 2011-12-02 10:12:53
|
Revision: 12087 http://plplot.svn.sourceforge.net/plplot/?rev=12087&view=rev Author: andrewross Date: 2011-12-02 10:12:46 +0000 (Fri, 02 Dec 2011) Log Message: ----------- Fix spelling mistake in comment. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2011-12-01 23:39:56 UTC (rev 12086) +++ trunk/src/plcore.c 2011-12-02 10:12:46 UTC (rev 12087) @@ -2959,7 +2959,7 @@ } } -// Make sure that the temporary file containing the driversr database +// Make sure that the temporary file containing the drivers database // is ready to read and close the directory handle fflush( fp_drvdb ); closedir( dp_drvdir ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ai...@us...> - 2014-05-20 22:49:55
|
Revision: 13126 http://sourceforge.net/p/plplot/code/13126 Author: airwin Date: 2014-05-20 22:49:48 +0000 (Tue, 20 May 2014) Log Message: ----------- Tighten up plInBuildTree logic. Test that the current directory is exactly the same as the top-level build directory or a subdirectory of that directory. (The old logic did not distinguish say build_dir from build_dir_install since the first letters of "build_dir_install" coincided with "build_dir".) The subdirectory logic implies searching for the path delimiter, so make sure that is appropriately designated for the different Unix and Windows path delimiters. Finally, make the whole path name comparisons independent of case on Windows platforms (as opposed to the old code which only make the drive letter case insensitive). Lightly tested on Linux and MinGW/Wine. More comprehensive testing is requested. Modified Paths: -------------- trunk/src/plcore.c Modified: trunk/src/plcore.c =================================================================== --- trunk/src/plcore.c 2014-05-20 18:37:46 UTC (rev 13125) +++ trunk/src/plcore.c 2014-05-20 22:49:48 UTC (rev 13126) @@ -2786,16 +2786,18 @@ plsc->dispatch_table = dispatch_table[plsc->device - 1]; } -PLDLLIMPEXP int plInBuildTree() +int plInBuildTree() { static int inited = 0; static int inBuildTree = 0; if ( inited == 0 ) { - char currdir[PLPLOT_MAX_PATH]; - char builddir[PLPLOT_MAX_PATH]; + int len_currdir, len_builddir; + char currdir[PLPLOT_MAX_PATH], *pcurrdir = currdir; + char builddir[PLPLOT_MAX_PATH], *pbuilddir = builddir; + if ( getcwd( currdir, PLPLOT_MAX_PATH ) == NULL ) { pldebug( "plInBuildTree():", "Not enough buffer space" ); @@ -2813,9 +2815,29 @@ } else { - // On Windows the first character is the drive letter - it is case-insensitive - if ( strncmp( builddir + 1, currdir + 1, strlen( builddir + 1 ) ) == 0 && - tolower( builddir[0] ) == tolower( currdir[0] ) ) + len_currdir = strlen( currdir ); + len_builddir = strlen( builddir ); +#if defined ( _MSC_VER ) + // On Windows all parts of the path are case insensitive + // so convert to lower case for the comparison. + for (; *pcurrdir; ++pcurrdir ) + *pcurrdir = tolower( *pcurrdir ); + for (; *pbuilddir; ++pbuilddir ) + *pbuilddir = tolower( *pbuilddir ); +#define PLPLOT_PATH_DELIMITER '\\' +#else +#define PLPLOT_PATH_DELIMITER '/' +#endif + // builddir does not have trailing path delimiter + // so the strncmp comparison checks if currdir is + // exactly the builddir or builddir with a string + // appended. So if that test succeeds, then check + // further if the currdir is exactly the build_dir + // or the appended string starts with the path + // delimiter, i.e., whether currdir is the builddir or + // a subdirectory of that directory. + if ( strncmp( builddir, currdir, len_builddir ) == 0 && + ( len_currdir == len_builddir || currdir[len_builddir] == PLPLOT_PATH_DELIMITER ) ) { inBuildTree = 1; } @@ -2887,11 +2909,11 @@ int n; #ifdef ENABLE_DYNDRIVERS - char buf[BUFFER2_SIZE]; + char buf[BUFFER2_SIZE]; const char * drvdir; char *devnam, *devdesc, *devtype, *driver, *tag, *seqstr; - int seq; - int i, j, driver_found, done = 0; + int seq; + int i, j, driver_found, done = 0; FILE *fp_drvdb = NULL; DIR * dp_drvdir = NULL; struct dirent* entry; @@ -3129,9 +3151,9 @@ static void plSelectDev() { - int dev, i, count; + int dev, i, count; size_t length; - char response[80]; + char response[80]; char * devname_env; // If device name is not already specified, try to get it from environment @@ -3239,11 +3261,11 @@ plLoadDriver( void ) { #ifdef ENABLE_DYNDRIVERS - int i, drvidx; + int i, drvidx; char sym[BUFFER_SIZE]; char *tag; - int n = plsc->device - 1; + int n = plsc->device - 1; PLDispatchTable *dev = dispatch_table[n]; PLLoadableDriver *driver = 0; @@ -4240,7 +4262,7 @@ #if 0 // BEGIN dev_fastimg COMMENT PLINT i, npts; short *xscl, *yscl; - int plbuf_write; + int plbuf_write; plsc->page_status = DRAWING; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |