]> sigrok.org Git - libsigrok.git/blobdiff - src/output/analog.c
output/analog: Allocate correct buffer size for sr_analog_to_float().
[libsigrok.git] / src / output / analog.c
index 9d6f56a3e6f9f70570d3a6a19205a9b2437f2d69..4018ec888659f797231f48fbca4d97eb2df1be62 100644 (file)
@@ -17,6 +17,7 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <config.h>
 #include <stdlib.h>
 #include <string.h>
 #include <math.h>
@@ -314,7 +315,9 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                break;
        case SR_DF_ANALOG2:
                analog2 = packet->payload;
-               if (!(fdata = g_try_malloc(analog2->num_samples * sizeof(float))))
+               num_channels = g_slist_length(analog2->meaning->channels);
+               if (!(fdata = g_try_malloc(
+                                               analog2->num_samples * num_channels * sizeof(float))))
                        return SR_ERR_MALLOC;
                if ((ret = sr_analog_to_float(analog2, fdata)) != SR_OK)
                        return ret;
@@ -329,7 +332,6 @@ static int receive(const struct sr_output *o, const struct sr_datafeed_packet *p
                        digits = 6;
                }
                sr_analog_unit_to_string(analog2, &suffix);
-               num_channels = g_slist_length(analog2->meaning->channels);
                for (i = 0; i < analog2->num_samples; i++) {
                        for (l = analog2->meaning->channels, c = 0; l; l = l->next, c++) {
                                ch = l->data;