#406 closed bug (fixed)
Copy selected attributes crashes with PostGIS layer
Reported by: | Owned by: | gsherman | |
---|---|---|---|
Priority: | major: does not work as expected | Milestone: | |
Component: | Vectors | Version: | 0.8 |
Keywords: | Cc: | ||
Must Fix for Release: | Yes | Platform: | Debian |
Platform Version: | Awaiting user input: | no |
Description
Using 0.8.0 preview 2 on Ubuntu 6.06.
I selected some features from a PostGIS layer, opened the attribute table, then tried to copy the selected records to the clipboard. QGIS crashed with a segmentation fault. Happens with all PostGIS layers points, lines or areas.
Works OK with the shapefile of the same layer.
Change History (16)
comment:1 by , 18 years ago
Milestone: | → Version 0.8 Release |
---|---|
Must Fix for Release: | No → Yes |
follow-up: 3 comment:2 by , 18 years ago
comment:4 by , 18 years ago
I checked out revision 6146, but couldn't get it to compile:
g++ -DHAVE_CONFIG_H -I. -I. -I../.. -DPKGDATAPATH=\"/home/kol/apps/share/qgis\" -I../gui/ -I../ui/ -I../core/ -g -Wall -I/usr/include -DQT3_SUPPORT -I/usr/mkspecs/default -I/usr/include/qt4/Qt3Support -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtDesigner -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtOpenGL -I/usr/include/qt4/QtSql -I/usr/include/qt4/QtXml -I/usr/include/qt4 -I/usr/include/qt4/QtSvg -I/usr/include/qt4/QtTest -I/usr/include/qt4/QtDesigner -D_REENTRANT -DQT_THREAD_SUPPORT -DQGISDEBUG -I/usr/include -g -Wall -MT libqgis_legend_la-qgslegend.lo -MD -MP -MF .deps/libqgis_legend_la-qgslegend.Tpo -c qgslegend.cpp -fPIC -DPIC -o .libs/libqgis_legend_la-qgslegend.o qgslegend.h: In constructor 'QgsLegend::QgsLegend(QgisApp*, QWidget*, const char*)': qgslegend.h:348: warning: 'QgsLegend::mMapCanvas' will be initialized after qgslegend.h:334: warning: 'bool QgsLegend::mShowLegendLayerFiles' qgslegend.cpp:56: warning: when initialized here qgslegend.cpp: In member function 'virtual void QgsLegend::mouseReleaseEvent(QMouseEvent*)': qgslegend.cpp:299: warning: unused variable 'origLayer' qgslegend.cpp:320: warning: unused variable 'origLayer' qgslegend.cpp:321: warning: unused variable 'destLayer' qgslegend.cpp: In member function 'void QgsLegend::addLayer(QgsMapLayer*)': qgslegend.cpp:527: error: 'class QgsLegendLayerFileGroup' has no member named 'setHidden' qgslegend.cpp: In member function 'bool QgsLegend::readXML(QDomNode&)': qgslegend.cpp:1054: error: 'class QgsLegendLayerFileGroup' has no member named 'setHidden' qgslegend.cpp:1054: error: 'class QgsLegendLayerFileGroup' has no member named 'setHidden' qgslegend.cpp: In member function 'QgsLegendLayer* QgsLegend::findLegendLayer(const QString&)': qgslegend.cpp:1163: warning: suggest parentheses around assignment used as truth value qgslegend.cpp: In member function 'void QgsLegend::showLegendLayerFileGroups()':qgslegend.cpp:1668: error: 'class QgsLegendLayerFileGroup' has no member named 'setHidden' qgslegend.cpp:1671: warning: suggest parentheses around assignment used as truth value make[4]: * [libqgis_legend_la-qgslegend.lo] Error 1
Colin
comment:5 by , 18 years ago
Colin,
Your Qt version seems to be < 4.2 (the current minimum version for QGIS)
Marco
comment:6 by , 18 years ago
Thanks Marco, I had 4.1.2. It took me a while to figure out how to get 4.2 installed into the right places, but I finally got the latest svn compiled succesfully.
Unfortunately, still the same result! Crash and segmentation fault when i hit the copy button.
When I selected the PostGIS layer I got a few error dialogs saying:
Could not open SRS database /resources/srs.db Error(14): unable to open database file
but it plotted OK. Selected a single line feature, opened the attribute table, moved the selected feature to the top, clicked the copy button:
... Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 607568 Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 607569 Debug: qgspostgresprovider.cpp: 845: (reset) Setting up binary cursor: declare qgisf binary cursor for select "oid",asbinary("the_geom",'NDR') as qgs_feature_geometry from "public"."GEODATA_250k_coast" WARNING: there is no transaction in progress Debug: qgsmaplayer.cpp: 127: (name) QgsMapLayer::name: returning name 'GEODATA_250k_coast Warning: selecting row with id 606635 Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 606635 Debug: qgspostgresprovider.cpp: 789: (getFeatureGeometry) QgsPostgresProvider::getFeatureGeometry using: declare qgisf binary cursor for select asbinary("the_geom",'NDR') from "public"."GEODATA_250k_coast" where "oid" = 606635 WARNING: there is already a transaction in progress QgsClipboard::replaceWith: replaced QGis clipboard. Segmentation fault
BTW PostGIS is v 1.1.6 and postgresql is 8.1.5
Thanks,
Colin
comment:8 by , 18 years ago
This is from strace (tail end)- is this OK?
Colin
select(9, [3 7 8], [], [], {0, 699757}) = 0 (Timeout) gettimeofday({1164967947, 507085}, NULL) = 0 gettimeofday({1164967947, 507120}, NULL) = 0 gettimeofday({1164967947, 507189}, NULL) = 0 write(4, "\0", 1) = 1 gettimeofday({1164967947, 508933}, NULL) = 0 uname({sys="Linux", node="kol-laptop", ...}) = 0 write(7, "\227\24\25\0\"\0\200\2\1\0\0\0\16\0\0\0\7\0\7\0\377\377"..., 888) = 888 read(7, "\34\225\204\325\323j\200\2\'\0\0\0\365,\200=\0,\200=x]"..., 32) = 32 read(7, "\34\225\205\325\323j\200\2\334\0\0\0\365,\200=\0,\200="..., 32) = 32 read(7, "\34\225\206\325\323j\200\2\370\0\0\0\365,\200=\0,\200="..., 32) = 32 read(7, "\34\225\207\325\323j\200\2\366\0\0\0\365,\200=\0,\200="..., 32) = 32 read(7, "\1 \211\325\t\0\0\0#\0\0\0\0\0\0\0\t\0\0\0\30\0\0\0\30"..., 32) = 32 read(7, "C\0\0\0\1\0\0\0\1\0\0\0\350\365\35\10\320x\364\277\350"..., 36) = 36 write(7, "\22\0\17\0\323j\200\2#\0\0\0#\0\0\0 \0\7\0\t\0\0\0C\0\0"..., 100) = 100 read(7, "\34\225\212\325\323j\200\2#\0\0\0\366,\200=\0,\200=x]\35"..., 32) = 32 read(7, "\1 \214\325\t\0\0\0#\0\0\0\0\0\0\0\t\0\0\0\30\0\0\0\30"..., 32) = 32 read(7, "C\0\0\0\1\0\0\0\1\0\0\0\350\365\35\10\320x\364\277\350"..., 36) = 36 write(7, "\22\0\17\0\323j\200\2#\0\0\0#\0\0\0 \0\7\0\t\0\0\0C\0\0"..., 208) = 208 read(7, "\34\225\215\325\323j\200\2#\0\0\0\366,\200=\0,\200=x]\35"..., 32) = 32 read(7, "\34\225\216\325\323j\200\2(\0\0\0\366,\200=\0,\200=x]\35"..., 32) = 32 read(7, "\34\225\217\325\323j\200\2D\0\0\0\366,\200=\0,\200=x]\35"..., 32) = 32 read(7, "\1 \220\325\5\0\0\0\362\0\0\0\0\0\0\0\5\0\0\0\30\0\0\0"..., 32) = 32 read(7, "\2\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 20) = 20 gettimeofday({1164967947, 511254}, NULL) = 0 write(7, "\22\0\v\0\323j\200\2\362\0\0\0\362\0\0\0 \0\7\0\5\0\0\0"..., 1460) = 1460 ioctl(7, FIONREAD, [128]) = 0 read(7, "\34\225\221\325\323j\200\2\362\0\0\0\370,\200=\0,\200="..., 128) = 128 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\336j\200\2\325j\200\2\0\0\0\0;\3\5\0\336j\200\2"..., 88) = 88 ioctl(7, FIONREAD, [0]) = 0 gettimeofday({1164967947, 513568}, NULL) = 0 select(9, [3 7 8], [], [], {1, 993621}) = 1 (in [3], left {1, 996000}) gettimeofday({1164967947, 513659}, NULL) = 0 read(3, "\0", 16) = 1 read(3, 0xbff481d0, 16) = -1 EAGAIN (Resource temporarily unavailable) gettimeofday({1164967947, 513760}, NULL) = 0 ioctl(7, FIONREAD, [0]) = 0 gettimeofday({1164967947, 513830}, NULL) = 0 select(9, [3 7 8], [], [], {1, 993359}) = 1 (in [7], left {0, 816000}) gettimeofday({1164967948, 692338}, NULL) = 0 gettimeofday({1164967948, 692373}, NULL) = 0 ioctl(7, FIONREAD, [32]) = 0 read(7, "\4\1\331\325\2231\200=c\0\0\0\310c\200\2\0\0\0\0\230\0"..., 32) = 32 write(7, "\22\0\7\0\240c\200\2\360\0\0\0\6\0\0\0 \3\5\0\1\0\0\0\223"..., 80) = 80 gettimeofday({1164967948, 693209}, NULL) = 0 write(4, "\0", 1) = 1 write(7, "7\0\4\0\337j\200\2\322c\200\2\0\0\0\0007\3\4\0\340j\200"..., 2704) = 2704 ioctl(7, FIONREAD, [352]) = 0 read(7, "\34\225\332\325\240c\200\2\360\0\0\0\2241\200=\0\0\0\0"..., 352) = 352 gettimeofday({1164967948, 695222}, NULL) = 0 select(9, [3 7 8], [], [], {0, 0}) = 1 (in [3], left {0, 0}) gettimeofday({1164967948, 695310}, NULL) = 0 read(3, "\0", 16) = 1 read(3, 0xbff481d0, 16) = -1 EAGAIN (Resource temporarily unavailable) gettimeofday({1164967948, 695411}, NULL) = 0 ioctl(7, FIONREAD, [0]) = 0 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\347j\200\2\322c\200\2\0\0\0\0;\3\v\0\347j\200\2"..., 112) = 112 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\350j\200\2\322c\200\2\0\0\0\0;\3\5\0\350j\200\2"..., 88) = 88 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\351j\200\2\322c\200\2\0\0\0\0;\3\5\0\351j\200\2"..., 88) = 88 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\352j\200\2\322c\200\2\0\0\0\0;\3\5\0\352j\200\2"..., 88) = 88 ioctl(7, FIONREAD, [0]) = 0 write(7, "7\0\4\0\353j\200\2\322c\200\2\0\0\0\0;\3\5\0\353j\200\2"..., 88) = 88 write(7, "7\0\4\0\354j\200\2\322c\200\2\0\0\0\0;\3\5\0\354j\200\2"..., 88) = 88 ioctl(7, FIONREAD, [0]) = 0 gettimeofday({1164967948, 696486}, NULL) = 0 select(9, [3 7 8], [], [], {0, 246723}) = 1 (in [7], left {0, 152000}) gettimeofday({1164967948, 792159}, NULL) = 0 gettimeofday({1164967948, 792194}, NULL) = 0 ioctl(7, FIONREAD, [32]) = 0 read(7, "\5\1a\326\3671\200=c\0\0\0\310c\200\2\0\0\0\0\230\0`\0"..., 32) = 32 gettimeofday({1164967948, 792361}, NULL) = 0 write(4, "\0", 1) = 1 write(7, "7\0\4\0\355j\200\2\322c\200\2\0\0\0\0007\3\4\0\356j\200"..., 7200) = 7200 write(2, "Debug: qgspostgresprovider.cpp: "..., 174) = 174 rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0 write(12, "\27\3\1\0 \232k*\211\377\300\22\0206\364\225.\301\204="..., 90) = 90 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\271F\232\3158\270\377\252\251\246\226\247i\234\336\364"..., 32) = 32 read(12, "\27\3\1\0\360", 5) = 5 read(12, "\364\v\3322\16\240\312\214\331\6\263,\7G\353/\22\327\10"..., 240) = 240 write(2, "Debug: qgspostgresprovider.cpp: "..., 227) = 227 rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0 write(12, "\27\3\1\0 |\242\355D\232Q\365\24\301\3107\331\271\330\200"..., 74) = 74 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\274\345Co!\315;.\302G\317\360\202\300\24\206n\216\223"..., 32) = 32 read(12, "\27\3\1\0@", 5) = 5 read(12, "\272x\323\300tjks\211tl\204\370\202Q\5\225\250\306\331"..., 64) = 64 write(2, "WARNING: there is already a tra"..., 53) = 53 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\352S\326x\356\346-4T\272\263\224\260Q\356\351b\370i\255"..., 32) = 32 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\232\f\277&\ff\263h\367p\221,\276\214\254\260v\334\332"..., 32) = 32 rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0 write(12, "\27\3\1\0 \261\7\356\25\tf\317\345\32\336;8\374\332\274"..., 90) = 90 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\241\263\234Z>\331?d=P\262\6u_.\315;\360\264rq\376m\vp"..., 32) = 32 read(12, "\27\3\1\0`", 5) = 5 read(12, "\267\253}\204\250Sy\347\241\302[\351K\10\363[VY`Jt\231"..., 96) = 96 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\n\367\313\324\271\224\224\315?\6\254\0\240Z}\225F\272"..., 32) = 32 read(12, "\27\3\1\0 ", 5) = 5 read(12, " \340\fI\235\252Y\227#\251]b\233\20q\203&\242$\225\262"..., 32) = 32 rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0 write(12, "\27\3\1\0 \326\305?\263\334\344T|\315obf\5~\213\312\307"..., 74) = 74 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "\304<\224u\236\274\34\215\4\233\2044\375V\r\366n\30\331"..., 32) = 32 read(12, "\27\3\1\0\200", 5) = 5 read(12, "\270.\247e\34\'\335.\306\320\23\347\264N\31\2\214POH\200"..., 128) = 128 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "!9o\301Q\321\0\251o\333\362\223_fE\341O\267\2148\220!8"..., 32) = 32 read(12, "\27\3\1\0 ", 5) = 5 read(12, "E\33ScP\232\257h~\214\327g\237\266@`u\260\223\272K\253"..., 32) = 32 rt_sigprocmask(SIG_BLOCK, [PIPE], [], 8) = 0 write(12, "\27\3\1\0 A\213\350\354\226y1\335_*}=Y\276\252\332r\206"..., 74) = 74 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 poll([{fd=12, events=POLLIN|POLLERR, revents=POLLIN}], 1, -1) = 1 read(12, "\27\3\1\0 ", 5) = 5 read(12, "T\337|\3773\325\363\335\334\332\223\24\275\257\6D\213\320"..., 32) = 32 read(12, "\27\3\1\0000", 5) = 5 read(12, "\212\256\212\343\322\367\333\1^Q\216\366I\226\340\303@"..., 48) = 48 write(2, "QgsClipboard::replaceWith: repla"..., 51) = 51 write(2, "\n", 1) = 1 --- SIGSEGV (Segmentation fault) @ 0 (0) --- +++ killed by SIGSEGV +++
comment:9 by , 18 years ago
A backtrace would be better. Something like this should work:
tcsh limit coredumpsize unlimited qgis gdb /path/to/qgis core.XXXXX bt
where core.XXXXX is the name of the coredump file that is generated when qgis crashed. The first 10 or 15 lines from the bt command are all that are required.
comment:10 by , 18 years ago
Thanks for that. I haven't done this before.
Here it is:
#0 0xb67f8963 in QgsGeometry::wkt (this=0x0) at qgsgeometry.cpp:178 #1 0xb69568ca in QgsClipboard::replaceWithCopyOf (this=0x80a3d58, features=@0xbf9dcd7c) at qgsclipboard.cpp:82 #2 0xb6924691 in QgisApp::editCopy (this=0x80a3b18, layerContainingSelection=0x83e1530) at qgisapp.cpp:3430 #3 0xb694d560 in QgsAttributeTableDisplay::copySelectedRowsToClipboard ( this=0x83a5c78) at qgsattributetabledisplay.cpp:236 #4 0xb6a94657 in QgsAttributeTableDisplay::qt_metacall (this=0x83a5c78, _c=QMetaObject::InvokeMetaMethod, _id=8, _a=0xbf9dd2ec) at qgsattributetabledisplay.moc.cpp:90 #5 0xb7e2dc92 in QMetaObject::activate (sender=0x8103e90, from_signal_index=29, to_signal_index=30, argv=0x0) at kernel/qobject.cpp:2911 #6 0xb7e2df69 in QMetaObject::activate (sender=0x0, m=0x0, from_local_signal_index=2, to_local_signal_index=3, argv=0x8050d58) at kernel/qobject.cpp:2963 #7 0xb79062d5 in QAbstractButton::clicked (this=0x0, _t1=false) at .moc/release-shared/moc_qabstractbutton.cpp:176 #8 0xb7732523 in QAbstractButtonPrivate::emitClicked (this=0x8405a88) at widgets/qabstractbutton.cpp:517 #9 0xb773372f in QAbstractButtonPrivate::click (this=0x8405a88) at widgets/qabstractbutton.cpp:510 #10 0xb7733917 in QAbstractButton::mouseReleaseEvent (this=0x8103e90, e=0xbf9dd974) at widgets/qabstractbutton.cpp:1072 #11 0xb77d964a in QToolButton::mouseReleaseEvent (this=0x0, e=0x8050d58) at widgets/qtoolbutton.cpp:598 #12 0xb74eba18 in QWidget::event (this=0x8103e90, event=0xbf9dd974) at kernel/qwidget.cpp:5576 #13 0xb7732886 in QAbstractButton::event (this=0x8103e90, e=0xbf9dd974) at widgets/qabstractbutton.cpp:1034 #14 0xb77d9484 in QToolButton::event (this=0x0, e=0x0) at widgets/qtoolbutton.cpp:1005 #15 0xb74a7a33 in QApplicationPrivate::notify_helper (this=0x807d1a8, receiver=0x8103e90, e=0xbf9dd974) at kernel/qapplication.cpp:3435
Colin
comment:11 by , 18 years ago
A potential fix is available in svn r6166.
If you're able to checkout and compile up the latest qgis, please do so and see if the problem has been fixed.
The backtrace suggests that some of the geometries in the postgres database are empty.
comment:12 by , 18 years ago
OK, that stops it from crashing, but I don't think there should be any null geometries. I checked in PostGIS by selecting where the_geom is null and it didn't find any. I selected a single feature from the map then copied from the attribute table and had a NULL as the geometry for that record, but it is plotting on the screen so it shouldn't be null.
After a bit of experimentation I found that if I selected a feature and it came up with a null geometry, if I inverted the selection, then inverted it again, it worked OK and the geometry showed up in the pasted text.
Maybe it's not talking to Postgis properly when it's initially fetching the geometries? The null shows up as the first record in each case and it seems in each case that the null's appear there is a warning message about a transaction already in progress:
Debug: qgspostgresprovider.cpp: 789: (getFeatureGeometry) QgsPostgresProvider::getFeatureGeometry using: declare qgisf binary cursor for select asbinary("the_geom",'NDR') from "public"."GEODATA_250k_coast" where "oid" = 607202 '''WARNING: there is already a transaction in progress''' Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 607230 Debug: qgspostgresprovider.cpp: 789: (getFeatureGeometry) QgsPostgresProvider::getFeatureGeometry using: declare qgisf binary cursor for select asbinary("the_geom",'NDR') from "public"."GEODATA_250k_coast" where "oid" = 607230 Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 607496 Debug: qgspostgresprovider.cpp: 789: (getFeatureGeometry) QgsPostgresProvider::getFeatureGeometry using: declare qgisf binary cursor for select asbinary("the_geom",'NDR') from "public"."GEODATA_250k_coast" where "oid" = 607496 Debug: qgspostgresprovider.cpp: 726: (getFeatureAttributes) QgsPostgresProvider::getFeatureAttributes using: select * from "public"."GEODATA_250k_coast" where "oid" = 607562 Debug: qgspostgresprovider.cpp: 789: (getFeatureGeometry) QgsPostgresProvider::getFeatureGeometry using: declare qgisf binary cursor for select asbinary("the_geom",'NDR') from "public"."GEODATA_250k_coast" where "oid" = 607562 QgsClipboard::replaceWith: replaced QGis clipboard. Debug: qgsgeometry.cpp: 2171: (exportToWkt) QgsGeometry::exportToWkt: entered Debug: qgsgeometry.cpp: 2305: (exportToWkt) QgsGeometry::exportToWkt: MULTILINESTRING found Debug: qgsgeometry.cpp: 2171: (exportToWkt) QgsGeometry::exportToWkt: entered Debug: qgsgeometry.cpp: 2305: (exportToWkt) QgsGeometry::exportToWkt: MULTILINESTRING found Debug: qgsgeometry.cpp: 2171: (exportToWkt) QgsGeometry::exportToWkt: entered Debug: qgsgeometry.cpp: 2305: (exportToWkt) QgsGeometry::exportToWkt: MULTILINESTRING found QgsClipboard::replaceWith: replaced system clipboard with: wkt_geom,gid,feattype,type,elevation,featrel,attrrel,planacc,elevacc,source,created,retired,pid,symbol,shape_leng NULL,6305,Connector Standard,2,0.00000000000,2003-03-11,2003-03-11,9999,25,GEOSCIENCE AUSTRALIA,2006-05-09,,1569900,0,0 ...
Thanks, Colin
comment:13 by , 18 years ago
The NULL in the copied text is something I made qgis put in when it finds an empty geometry, but real problem is why qgis gets an empty geometry in the first place. I'll look some more.
comment:14 by , 18 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Fixed in svn r6171. Thanks for the backtrace and debugging messages, Colin - they allowed me to work out how to reproduce the problem and hence fix it.
Works for me with latest svn. Are you able to try the svn version of qgis?
Does anyone else have this problem?